from __future__ import annotations

import json
import sqlite3
from pathlib import Path
from project_catalog import load_all_projects

DB_PATH = Path(__file__).parent / 'email_agent.db'

SCHEMA = '''
CREATE TABLE IF NOT EXISTS product_catalog (
  project_id TEXT PRIMARY KEY,
  title TEXT NOT NULL,
  status TEXT,
  target_industries TEXT NOT NULL,
  customer_problem TEXT,
  potential_score REAL,
  confidence TEXT,
  source_file TEXT NOT NULL,
  synced_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS lead_project_matches (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  contact_id INTEGER NOT NULL,
  project_id TEXT NOT NULL,
  industry_fit REAL NOT NULL DEFAULT 0,
  problem_pressure REAL NOT NULL DEFAULT 0,
  company_fit REAL NOT NULL DEFAULT 0,
  technical_fit REAL NOT NULL DEFAULT 0,
  economic_value REAL NOT NULL DEFAULT 0,
  reachability REAL NOT NULL DEFAULT 0,
  evidence_quality REAL NOT NULL DEFAULT 0,
  sale_probability REAL NOT NULL DEFAULT 0,
  lead_score REAL NOT NULL DEFAULT 0,
  rationale TEXT,
  evidence_json TEXT,
  status TEXT NOT NULL DEFAULT 'researched',
  human_gate TEXT NOT NULL DEFAULT 'pending',
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  UNIQUE(contact_id, project_id)
);
CREATE INDEX IF NOT EXISTS idx_lpm_score ON lead_project_matches(lead_score DESC);
CREATE INDEX IF NOT EXISTS idx_lpm_gate ON lead_project_matches(human_gate, status);
'''


def init_schema(db_path: Path = DB_PATH) -> None:
    with sqlite3.connect(db_path) as conn:
        conn.executescript(SCHEMA)
        conn.commit()


def sync_projects(db_path: Path = DB_PATH) -> int:
    projects = load_all_projects()
    with sqlite3.connect(db_path) as conn:
        for p in projects:
            values = (
                p.project_id, p.title, p.status,
                json.dumps(p.target_industries, ensure_ascii=False),
                p.customer_problem, p.potential_score,
                p.confidence, p.source_file,
            )
            conn.execute(
                'INSERT OR REPLACE INTO product_catalog '
                '(project_id,title,status,target_industries,customer_problem,'
                'potential_score,confidence,source_file,synced_at) '
                'VALUES (?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP)', values
            )
        conn.commit()
    return len(projects)


if __name__ == '__main__':
    init_schema()
    print(f'synced_projects={sync_projects()}')
