from __future__ import annotations

import uuid
from datetime import datetime

from pydantic import BaseModel, Field


class ConsistencySweepIssueSummary(BaseModel):
    fail: int = 0
    automation_error: int = 0
    warn: int = 0
    info: int = 0


class ConsistencySweepRepoResult(BaseModel):
    repo_slug: str
    repo_path: str
    result: str
    summary: ConsistencySweepIssueSummary
    fixes_applied: list[str] = Field(default_factory=list)


class ConsistencySweepRemoteAllGenerate(BaseModel):
    max_seconds: int = Field(
        default=300,
        ge=0,
        le=3600,
        description="Wall-clock budget for the remote-all sweep (0 disables)",
    )
    source: str = Field(
        default="api",
        description="Runner label stored on progress events (local-timer, activity-core, api)",
    )


class ConsistencySweepRemoteAllRun(BaseModel):
    started_at: datetime
    completed_at: datetime
    max_seconds: int
    source: str
    exit_code: int
    automation_error: bool = False
    lock_skipped: bool
    repos_processed: list[ConsistencySweepRepoResult] = Field(default_factory=list)
    skipped_clean: list[str] = Field(default_factory=list)
    skipped_missing: list[str] = Field(default_factory=list)
    skipped_budget: list[str] = Field(default_factory=list)
    progress_event_id: uuid.UUID | None = None