"""Employee logs and project management schemas."""

from __future__ import annotations

from pydantic import BaseModel, Field


class EmployeeLogItem(BaseModel):
    """Single employee log entry for internal pilot tracking."""

    timestamp: str
    action: str
    ai_request: str | None = None
    ai_result: list[str] = Field(default_factory=list)
    findings: list[str] = Field(default_factory=list)
    notes: list[str] = Field(default_factory=list)


class EmployeeLogRecord(BaseModel):
    """Employee-centric internal log record."""

    employee_code: str
    employee_name: str
    role_title: str
    agent_role: str
    project_code: str
    project_name: str
    status: str
    shift_date: str
    summary: str
    priority: str
    role_group: str | None = None
    next_priority: str | None = None
    progress_percent: int = 0
    completed_count: int = 0
    missing_count: int = 0
    findings: list[str] = Field(default_factory=list)
    missing_items: list[str] = Field(default_factory=list)
    notes: list[str] = Field(default_factory=list)
    logs: list[EmployeeLogItem] = Field(default_factory=list)


class EmployeeLogsResponse(BaseModel):
    """List payload for employee logs dashboard."""

    items: list[EmployeeLogRecord] = Field(default_factory=list)
    source: str = "fallback"
    used_fallback: bool = False
    message: str | None = None


class ProjectSummaryCard(BaseModel):
    """High-level project summary metrics for dashboard cards."""

    label: str
    value: str
    note: str | None = None
    trend: str | None = None


class ProjectPhaseProgress(BaseModel):
    """Progress status for a project phase."""

    phase_code: str
    phase_name: str
    progress_percent: int = Field(..., ge=0, le=100)
    status: str
    owner: str
    note: str | None = None


class ProjectMilestoneItem(BaseModel):
    """Milestone checklist item for a project."""

    title: str
    due_date: str
    status: str
    owner: str
    completed: bool = False
    note: str | None = None


class ProjectTimelineEvent(BaseModel):
    """Single project timeline event."""

    event_date: str
    title: str
    description: str
    event_type: str
    owner: str


class ProjectRiskItem(BaseModel):
    """Risk or blocker item affecting project delivery."""

    title: str
    severity: str
    status: str
    owner: str
    mitigation: str


class ProjectTaskItem(BaseModel):
    """Upcoming task item for project management tracking."""

    title: str
    due_date: str
    assignee: str
    status: str
    priority: str
    note: str | None = None


class ProjectManagementRecord(BaseModel):
    """Aggregated management dataset for one project."""

    project_code: str
    project_name: str
    client_name: str
    location: str
    project_manager: str
    status: str
    current_phase: str
    overall_progress_percent: int = Field(..., ge=0, le=100)
    budget_status: str
    summary_cards: list[ProjectSummaryCard] = Field(default_factory=list)
    phase_progress: list[ProjectPhaseProgress] = Field(default_factory=list)
    milestones: list[ProjectMilestoneItem] = Field(default_factory=list)
    timeline: list[ProjectTimelineEvent] = Field(default_factory=list)
    risks: list[ProjectRiskItem] = Field(default_factory=list)
    upcoming_tasks: list[ProjectTaskItem] = Field(default_factory=list)


class ProjectManagementResponse(BaseModel):
    """List payload for the project management dashboard."""

    items: list[ProjectManagementRecord] = Field(default_factory=list)
    source: str = "fallback"
    used_fallback: bool = False
    message: str | None = None
