ó
     ïÒje  ã                   ó^  • S SK r S SKrS SKr\R                  R	                  S5      r\(       dk  \R                  R                  \R                  R                  \R                  R                  \
5      5      SSS5      r\R                  R                  \5      rS rS r\S:X  a  \" 5         gg)	é    NÚDB_PATHz..Ú_Datazscience_grades.dbc                  ó„   • [         R                  " [        SS9n [         R                  U l        U R                  S5        U $ )Né
   )ÚtimeoutzPRAGMA foreign_keys = ON)Úsqlite3Úconnectr   ÚRowÚrow_factoryÚexecute)Úconns    Ú
db_init.pyÚget_dbr      s0   € Ü�?Š?œ7¨BÑ/€DÜ—{‘{€DÔØ‡L�LÐ+Ô,Ø€Kó    c            	      ó¦  • [         R                  " [         R                  R                  [        5      SS9  [        5       n U R                  5       nUR                  S5        SUR                  S5      R                  5        Vs/ s H  o"S   PM	     sn;  a  UR                  S5        SUR                  S	5      R                  5        Vs/ s H  o"S   PM	     sn;  a  UR                  S
5        / SQnU H  u  pEpgnUR                  SXEXgU45        M     U R                  5         U R                  5         [        S[         35        g s  snf s  snf )NT)Úexist_okaÍ  
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        username TEXT UNIQUE NOT NULL,
        role TEXT NOT NULL CHECK(role IN ('admin','parent','kid')),
        password_hash TEXT NOT NULL,
        display_name TEXT NOT NULL,
        parent_id INTEGER,
        max_kids INTEGER DEFAULT 3,
        active INTEGER DEFAULT 1,
        avatar TEXT DEFAULT '',
        unlock_all INTEGER DEFAULT 0,
        course_level INTEGER DEFAULT 2,
        created_at TEXT DEFAULT (datetime('now','localtime')),
        last_login TEXT
    );

    CREATE TABLE IF NOT EXISTS units (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        code TEXT NOT NULL,
        name TEXT NOT NULL,
        color TEXT NOT NULL,
        icon TEXT NOT NULL,
        sort_order INTEGER NOT NULL
    );

    CREATE TABLE IF NOT EXISTS chapters (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        unit_id INTEGER NOT NULL REFERENCES units(id),
        code TEXT NOT NULL,
        name TEXT NOT NULL,
        sort_order INTEGER NOT NULL
    );

    CREATE TABLE IF NOT EXISTS sections (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        chapter_id INTEGER NOT NULL REFERENCES chapters(id),
        code TEXT NOT NULL,
        name TEXT NOT NULL,
        sort_order INTEGER NOT NULL
    );

    CREATE TABLE IF NOT EXISTS activities (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        section_id INTEGER NOT NULL REFERENCES sections(id),
        activity_type TEXT NOT NULL,
        title TEXT NOT NULL,
        data_json TEXT NOT NULL,
        points INTEGER DEFAULT 10,
        sort_order INTEGER NOT NULL
    );

    CREATE TABLE IF NOT EXISTS experiments (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        section_id INTEGER NOT NULL REFERENCES sections(id),
        title TEXT NOT NULL,
        data_json TEXT NOT NULL,
        points INTEGER DEFAULT 20,
        sort_order INTEGER NOT NULL
    );

    CREATE TABLE IF NOT EXISTS activity_attempts (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        user_id INTEGER NOT NULL REFERENCES users(id),
        activity_id INTEGER NOT NULL REFERENCES activities(id),
        score REAL NOT NULL,
        points_earned INTEGER NOT NULL,
        answers_json TEXT,
        time_spent INTEGER DEFAULT 0,
        attempted_at TEXT DEFAULT (datetime('now','localtime'))
    );

    CREATE TABLE IF NOT EXISTS experiment_completions (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        user_id INTEGER NOT NULL REFERENCES users(id),
        experiment_id INTEGER NOT NULL REFERENCES experiments(id),
        completed INTEGER DEFAULT 0,
        notes TEXT DEFAULT '',
        completed_at TEXT DEFAULT (datetime('now','localtime'))
    );

    CREATE TABLE IF NOT EXISTS badges (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        code TEXT UNIQUE NOT NULL,
        name TEXT NOT NULL,
        description TEXT NOT NULL,
        icon TEXT NOT NULL,
        color TEXT NOT NULL
    );

    CREATE TABLE IF NOT EXISTS user_badges (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        user_id INTEGER NOT NULL REFERENCES users(id),
        badge_id INTEGER NOT NULL REFERENCES badges(id),
        awarded_at TEXT DEFAULT (datetime('now','localtime')),
        UNIQUE(user_id, badge_id)
    );

    CREATE TABLE IF NOT EXISTS section_progress (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        user_id INTEGER NOT NULL REFERENCES users(id),
        section_id INTEGER NOT NULL REFERENCES sections(id),
        status TEXT DEFAULT 'not_started',
        best_score REAL DEFAULT 0,
        total_points INTEGER DEFAULT 0,
        activities_completed INTEGER DEFAULT 0,
        last_accessed TEXT,
        UNIQUE(user_id, section_id)
    );

    CREATE TABLE IF NOT EXISTS user_stats (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        user_id INTEGER NOT NULL REFERENCES users(id),
        total_points INTEGER DEFAULT 0,
        total_stars INTEGER DEFAULT 0,
        streak_days INTEGER DEFAULT 0,
        last_active_date TEXT,
        UNIQUE(user_id)
    );
    ÚlevelzPRAGMA table_info(units)Únamez4ALTER TABLE units ADD COLUMN level INTEGER DEFAULT 2Úpartialz$PRAGMA table_info(activity_attempts)zBALTER TABLE activity_attempts ADD COLUMN partial INTEGER DEFAULT 0))Úfirst_stepszFirst StepszComplete your first activityÚstarú#FFD700)Úplant_expertzPlant Expertz%Complete all Plant chapter activitiesÚleafz#4CAF50)Úbody_masterzBody Masterz&Complete all People chapter activitiesÚheartz#E91E63)Úmatter_geniuszMatter Geniusz(Complete all States of Matter activitiesÚatomz#2196F3)Ú
force_heroz
Force Heroz'Complete all Motion & Forces activitiesÚboltz#FF9800)Úearth_guardianzEarth Guardianz%Complete all Earth Science activitiesÚglobez#8BC34A)Úsky_explorerzSky ExplorerzComplete all The Sky activitiesÚmoonz#9C27B0)Úperfect_scorezPerfect ScorezGet 100% on any activityÚtrophyr   )Ú	scientistzYoung ScientistzComplete 5 experimentsÚflaskz#00BCD4)Ústreak_7zWeek WarriorzLearn 7 days in a rowÚfirez#FF5722)Úall_completezScience ChampionzComplete the entire workbookÚcrownr   )Úquiz_masterzQuiz MasterzComplete 20 activitiesÚbrainz#7C4DFFzRINSERT OR IGNORE INTO badges (code,name,description,icon,color) VALUES (?,?,?,?,?)zDatabase initialized at )ÚosÚmakedirsÚpathÚdirnamer   r   ÚcursorÚexecutescriptr   ÚfetchallÚcommitÚcloseÚprint)	r   ÚcÚrÚbadgesÚcoder   ÚdescÚiconÚcolors	            r   Úinit_dbr@      s  € Ü‡K‚K”—‘—‘¤Ó(°4Ò8Ü‹8€DØ�‰‹€Aà‡O�Oð wô w	ðt ¨!¯)©)Ð4NÓ*O×*XÑ*XÔ*ZÓ[Ò*Z Q˜”yÑ*ZÑ[Ó[Ø	�	‰	ÐHÔIØ¨A¯I©IÐ6\Ó,]×,fÑ,fÔ,hÓiÒ,h q˜6œÑ,hÑiÓiØ	�	‰	ÐVÔWò€Fó *0Ñ%ˆ�D Ø	�	‰	ÐfØ˜t¨5Ð1ö	3ñ *0ð 	‡K�K„MØ‡J�J„LÜ	Ð$¤W IÐ
.Õ/ùò3 \ùâis   ÂE	ÃEÚ__main__)r   r/   ÚhashlibÚenvironÚgetr   r1   Újoinr2   ÚabspathÚ__file__Únormpathr   r@   Ú__name__© r   r   Ú<module>rK      sŠ   ðÛ Û 	Û à
�*‰*�.‰.˜Ó
#€ÞØ�g‰g�l‰l˜2Ÿ7™7Ÿ?™?¨2¯7©7¯?©?¸8Ó+DÓEÀtÈWÐViÓj€GØ�g‰g×Ñ˜wÓ'€GòòX0ðv ˆzÓÙ…Ið r   