"""CRUD розкладу аудитів — без Streamlit."""
from __future__ import annotations

from datetime import date

from sqlmodel import Session, select

from db.session import get_engine
from models import AuditSchedule, Companies


def get_audit_schedule() -> list[dict]:
    with Session(get_engine()) as s:
        companies = {c.id: c.name for c in s.exec(select(Companies)).all()}
        events = s.exec(select(AuditSchedule).order_by(AuditSchedule.planned_date)).all()
        return [
            {
                "id": e.id,
                "company_id": e.company_id,
                "company": companies.get(e.company_id, "?"),
                "planned_date": e.planned_date,
                "status": e.status,
                "note": e.note or "",
            }
            for e in events
        ]


def add_audit_event(company_id: int, planned_date: date, note: str) -> int:
    event = AuditSchedule(
        company_id=company_id,
        planned_date=planned_date,
        status="planned",
        note=note or None,
    )
    with Session(get_engine()) as s:
        s.add(event)
        s.commit()
        s.refresh(event)
        return event.id


def update_audit_event(event_id: int, planned_date: date, status: str, note: str) -> None:
    with Session(get_engine()) as s:
        event = s.get(AuditSchedule, event_id)
        if event is None:
            raise ValueError(f"AuditSchedule {event_id} not found")
        event.planned_date = planned_date
        event.status = status
        event.note = note or None
        s.add(event)
        s.commit()


def delete_audit_event(event_id: int) -> None:
    with Session(get_engine()) as s:
        event = s.get(AuditSchedule, event_id)
        if event:
            s.delete(event)
            s.commit()
