#!/usr/bin/env python3
from __future__ import annotations

import argparse
import sqlite3
from datetime import date
from pathlib import Path

DB = Path('/home/agent/.hermes/assets/Gesundheit/health_data.db')


def ensure(con: sqlite3.Connection) -> None:
    con.execute('''CREATE TABLE IF NOT EXISTS low_histamine_experiments (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        start_date TEXT NOT NULL,
        end_date TEXT,
        phase TEXT NOT NULL DEFAULT 'baseline' CHECK(phase IN ('baseline','challenge','paused','completed')),
        challenge_food TEXT,
        hypothesis TEXT,
        notes TEXT,
        status TEXT DEFAULT 'active' CHECK(status IN ('active','completed','cancelled')),
        created_at TEXT DEFAULT CURRENT_TIMESTAMP,
        updated_at TEXT DEFAULT CURRENT_TIMESTAMP
    )''')


def main() -> int:
    ap = argparse.ArgumentParser(description='Manage low-histamine baseline/challenge experiments.')
    sub = ap.add_subparsers(dest='cmd', required=True)
    p = sub.add_parser('start')
    p.add_argument('--date', default=date.today().isoformat())
    p.add_argument('--hypothesis', default='Low-Histamine-Baseline zur Symptom-/Ernährungskorrelation')
    p.add_argument('--notes', default='')
    p = sub.add_parser('challenge')
    p.add_argument('--food', required=True)
    p.add_argument('--date', default=date.today().isoformat())
    p.add_argument('--notes', default='')
    p = sub.add_parser('complete')
    p.add_argument('id', type=int)
    p.add_argument('--date', default=date.today().isoformat())
    p.add_argument('--notes', default='')
    sub.add_parser('list')
    args = ap.parse_args()
    con = sqlite3.connect(DB); con.row_factory = sqlite3.Row
    try:
        ensure(con)
        if args.cmd == 'start':
            con.execute('''INSERT INTO low_histamine_experiments(start_date,phase,hypothesis,notes,status,updated_at)
                           VALUES(?,'baseline',?,?, 'active', CURRENT_TIMESTAMP)''', (args.date, args.hypothesis, args.notes))
            con.commit(); print('Low-Histamine-Baseline gestartet')
        elif args.cmd == 'challenge':
            con.execute('''INSERT INTO low_histamine_experiments(start_date,phase,challenge_food,hypothesis,notes,status,updated_at)
                           VALUES(?,'challenge',?,?,?, 'active', CURRENT_TIMESTAMP)''', (args.date, args.food, f'Re-Challenge: {args.food}', args.notes))
            con.commit(); print(f'Challenge gestartet: {args.food}')
        elif args.cmd == 'complete':
            con.execute("UPDATE low_histamine_experiments SET end_date=?, status='completed', phase='completed', notes=COALESCE(notes,'') || CASE WHEN ?='' THEN '' ELSE '\n' || ? END, updated_at=CURRENT_TIMESTAMP WHERE id=?", (args.date, args.notes, args.notes, args.id))
            con.commit(); print(f'Experiment abgeschlossen: {args.id}')
        elif args.cmd == 'list':
            for r in con.execute('SELECT id,start_date,end_date,phase,challenge_food,status,hypothesis FROM low_histamine_experiments ORDER BY id DESC'):
                print(dict(r))
    finally:
        con.close()
    return 0

if __name__ == '__main__':
    raise SystemExit(main())
