from datetime import date, datetime
from typing import Any

from pydantic import BaseModel


class ProcessOut(BaseModel):
    id: str
    company_id: str
    company_name: str | None = None
    company_nif: str | None = None
    source: str
    process_number: str
    tribunal: str
    juizo: str | None
    species: str | None
    role_in_process: str | None
    date_filed: date
    first_seen_at: datetime
    last_seen_at: datetime


class ProcessEventOut(BaseModel):
    id: str
    event_type: str
    payload: dict[str, Any] | None
    occurred_at: datetime


class ProcessDetail(ProcessOut):
    raw: dict[str, Any]
    events: list[ProcessEventOut] = []


class ProcessList(BaseModel):
    items: list[ProcessOut]
    total: int
    page: int
    page_size: int


class DashboardMetrics(BaseModel):
    total_processes: int
    new_24h: int
    by_source: dict[str, int]
    timeline: list[dict[str, Any]]
    last_scrapes: list[dict[str, Any]]


class ScrapingLogOut(BaseModel):
    id: str
    source: str
    started_at: datetime
    finished_at: datetime | None
    status: str
    rows_seen: int
    rows_new: int
    error: str | None
    params: dict[str, Any] | None
    progress_current: int = 0
    progress_total: int = 0
