
    mi                        d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	  e	e
          ZdZdZd	Zd
Zg dZddee         dej        fdZddee         ddfdZddee         ddfdZe
dk    r e              ede            dS dS )zl
SQLite database schema for Garmin Health Sync system.

Defines tables for sync tracking and data indexing.
    N)Path)Optional)DB_PATH)setup_loggera]  
CREATE TABLE IF NOT EXISTS sync_records (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    data_type TEXT NOT NULL,
    start_date TEXT NOT NULL,
    end_date TEXT NOT NULL,
    status TEXT NOT NULL,  -- 'success', 'failed', 'partial'
    records_synced INTEGER DEFAULT 0,
    error_message TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
z
CREATE TABLE IF NOT EXISTS last_sync_state (
    data_type TEXT PRIMARY KEY,
    last_sync_date TEXT NOT NULL,
    total_records INTEGER DEFAULT 0,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
a%  
CREATE TABLE IF NOT EXISTS daily_metrics_index (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    metric_type TEXT NOT NULL,
    date TEXT NOT NULL,
    file_path TEXT NOT NULL,
    has_data BOOLEAN DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE(metric_type, date)
);
a8  
CREATE TABLE IF NOT EXISTS activity_index (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    activity_id TEXT UNIQUE NOT NULL,
    activity_type TEXT,
    date TEXT NOT NULL,
    duration_seconds INTEGER,
    distance_meters REAL,
    file_path TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
)z]CREATE INDEX IF NOT EXISTS idx_sync_records_type_date ON sync_records(data_type, start_date);zaCREATE INDEX IF NOT EXISTS idx_daily_metrics_type_date ON daily_metrics_index(metric_type, date);zECREATE INDEX IF NOT EXISTS idx_activity_date ON activity_index(date);zNCREATE INDEX IF NOT EXISTS idx_activity_type ON activity_index(activity_type);db_pathreturnc                 |    | pt           }t          j        t          |                    }t          j        |_        |S )zGet a database connection.

    Args:
        db_path: Optional path to database file (defaults to config.DB_PATH)

    Returns:
        SQLite connection object
    )r   sqlite3connectstrRowrow_factory)r   pathconns      )/root/projects/butler/health/db/schema.pyget_connectionr   J   s2     gD?3t99%%D{DK    c                 2   | pt           }t                              d|            t          |          5 }|                                }|                    t                     |                    t                     |                    t                     |                    t                     t          D ]}|                    |           |                                 ddd           n# 1 swxY w Y   t                              d           dS )zInitialize database schema.

    Creates all necessary tables and indexes if they don't exist.

    Args:
        db_path: Optional path to database file (defaults to config.DB_PATH)
    zInitializing database at Nz Database initialization complete)r   loggerinfor   cursorexecuteCREATE_SYNC_RECORDS_TABLECREATE_LAST_SYNC_STATE_TABLE CREATE_DAILY_METRICS_INDEX_TABLECREATE_ACTIVITY_INDEX_TABLECREATE_INDEXEScommit)r   r   r   r   	index_sqls        r   init_databaser    Y   s2    gD
KK2D22333			  	0111344478882333 ( 	& 	&INN9%%%%               KK233333s   B0C22C69C6c                    | pt           }t                              d|            t          |          5 }|                                }|                    d           |                    d           |                    d           |                    d           |                                 ddd           n# 1 swxY w Y   t          |           t                              d           dS )zReset database by dropping all tables and reinitializing.

    WARNING: This will delete all sync history and indexes!

    Args:
        db_path: Optional path to database file (defaults to config.DB_PATH)
    zResetting database at z!DROP TABLE IF EXISTS sync_recordsz$DROP TABLE IF EXISTS last_sync_statez(DROP TABLE IF EXISTS daily_metrics_indexz#DROP TABLE IF EXISTS activity_indexNzDatabase reset complete)	r   r   warningr   r   r   r   r    r   )r   r   r   r   s       r   reset_databaser#   v   s    gD
NN2D22333			 	 	:;;;=>>>ABBB<===	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 $
KK)*****s   A=B??CC__main__zDatabase initialized at )N)__doc__r
   pathlibr   typingr   health.configr   health.utils.logging_configr   __name__r   r   r   r   r   r   
Connectionr   r    r#   print r   r   <module>r.      se                 ! ! ! ! ! ! 4 4 4 4 4 4	h		   
$      HTN g6H    4 48D> 4T 4 4 4 4:+ +HTN +d + + + +6 zMOOO	E
.W
.
.///// r   