from uuid import UUID
from typing import Optional
from app.modules.dossier.domain.entities import DossierRecord

class DossierRepository:
    def __init__(self, conn):
        self._conn = conn

    def ensure_schema(self):
        with self._conn.cursor() as cur:
            cur.execute("""
                CREATE SCHEMA IF NOT EXISTS dossier;
                CREATE TABLE IF NOT EXISTS dossier.records (
                    id UUID PRIMARY KEY,
                    project_id UUID NOT NULL,
                    title TEXT NOT NULL,
                    document_type TEXT NOT NULL,
                    file_path TEXT NOT NULL,
                    status TEXT NOT NULL,
                    created_at TIMESTAMP WITH TIME ZONE
                );
            """)

    def save(self, record: DossierRecord) -> None:
        self.ensure_schema()
        with self._conn.cursor() as cur:
            cur.execute("""
                INSERT INTO dossier.records 
                (id, project_id, title, document_type, file_path, status, created_at)
                VALUES (%s, %s, %s, %s, %s, %s, %s)
                ON CONFLICT (id) DO UPDATE SET
                    title = EXCLUDED.title,
                    status = EXCLUDED.status;
            """, (
                str(record.id),
                str(record.project_id),
                record.title,
                record.document_type,
                record.file_path,
                record.status,
                record.created_at
            ))
