import sqlite3
from pathlib import Path
from agenda_mod.config import DATABASE_PATH

SCHEMA = [
    '''CREATE TABLE IF NOT EXISTS empresas (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        nome TEXT NOT NULL UNIQUE,
        email TEXT DEFAULT '',
        telefone TEXT DEFAULT '',
        ativa INTEGER DEFAULT 1
    )''',
    '''CREATE TABLE IF NOT EXISTS utentes (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        nome TEXT NOT NULL,
        email TEXT DEFAULT '',
        telefone TEXT DEFAULT '',
        empresa_id INTEGER,
        ativo INTEGER DEFAULT 1,
        FOREIGN KEY (empresa_id) REFERENCES empresas(id)
    )''',
    '''CREATE TABLE IF NOT EXISTS medicos (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        nome TEXT NOT NULL UNIQUE,
        cor TEXT DEFAULT '#1a73e8',
        ativo INTEGER DEFAULT 1
    )''',
    '''CREATE TABLE IF NOT EXISTS consultas (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        utente_id INTEGER,
        empresa_id INTEGER,
        medico_id INTEGER,
        utente_nome TEXT NOT NULL,
        empresa_nome TEXT DEFAULT '',
        medico_nome TEXT NOT NULL,
        tipo TEXT DEFAULT 'Medicina do Trabalho',
        data TEXT NOT NULL,
        hora_inicio TEXT NOT NULL,
        hora_fim TEXT NOT NULL,
        estado TEXT NOT NULL DEFAULT 'Marcada',
        observacoes TEXT DEFAULT '',
        created_at TEXT DEFAULT CURRENT_TIMESTAMP,
        remarcada_de INTEGER,
        FOREIGN KEY (utente_id) REFERENCES utentes(id),
        FOREIGN KEY (empresa_id) REFERENCES empresas(id),
        FOREIGN KEY (medico_id) REFERENCES medicos(id)
    )''',
    '''CREATE TABLE IF NOT EXISTS lista_espera (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        utente_id INTEGER,
        empresa_id INTEGER,
        utente_nome TEXT NOT NULL,
        empresa_nome TEXT DEFAULT '',
        telefone TEXT DEFAULT '',
        email TEXT DEFAULT '',
        medico_preferido TEXT DEFAULT '',
        prioridade INTEGER DEFAULT 2,
        observacoes TEXT DEFAULT '',
        ativa INTEGER DEFAULT 1,
        created_at TEXT DEFAULT CURRENT_TIMESTAMP
    )''',
    '''CREATE TABLE IF NOT EXISTS consumos_consulta (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        consulta_id INTEGER NOT NULL,
        produto TEXT NOT NULL,
        quantidade INTEGER NOT NULL DEFAULT 1,
        created_at TEXT DEFAULT CURRENT_TIMESTAMP,
        FOREIGN KEY (consulta_id) REFERENCES consultas(id)
    )'''
]

SEED_EMPRESAS = [('COFIHST', 'geral@cofihst.pt', ''), ('Continente', '', ''), ('Empresa Exemplo', '', '')]
SEED_MEDICOS = [('Dra. Joana', '#1a73e8'), ('Dr. Carlos', '#188038'), ('Dra. Ana', '#a142f4')]
SEED_UTENTES = [('João Silva', 'joao@email.pt', '912345678', 2), ('Maria Costa', 'maria@email.pt', '913456789', 2), ('Pedro Santos', '', '', 3)]


def get_connection():
    conn = sqlite3.connect(DATABASE_PATH)
    conn.row_factory = sqlite3.Row
    return conn


def init_db():
    Path(DATABASE_PATH).parent.mkdir(parents=True, exist_ok=True)
    with get_connection() as conn:
        for statement in SCHEMA:
            conn.execute(statement)
        if conn.execute('SELECT COUNT(*) FROM empresas').fetchone()[0] == 0:
            conn.executemany('INSERT INTO empresas (nome,email,telefone) VALUES (?,?,?)', SEED_EMPRESAS)
        if conn.execute('SELECT COUNT(*) FROM medicos').fetchone()[0] == 0:
            conn.executemany('INSERT INTO medicos (nome,cor) VALUES (?,?)', SEED_MEDICOS)
        if conn.execute('SELECT COUNT(*) FROM utentes').fetchone()[0] == 0:
            conn.executemany('INSERT INTO utentes (nome,email,telefone,empresa_id) VALUES (?,?,?,?)', SEED_UTENTES)
        conn.commit()


def row_to_dict(row):
    return dict(row) if row else None


def rows_to_list(rows):
    return [dict(row) for row in rows]
