import uuid
from datetime import datetime
from typing import Optional

from pydantic import BaseModel, ConfigDict, Field


class DataSourceResponse(BaseModel):
    model_config = ConfigDict(from_attributes=True)

    id: uuid.UUID
    name: str
    display_name: Optional[str] = None
    sync_type: str
    is_enabled: bool
    sync_interval_minutes: int
    last_sync_at: Optional[datetime] = None
    last_sync_status: Optional[str] = None
    last_sync_records: int
    created_at: datetime


class DataSourceUpdate(BaseModel):
    is_enabled: Optional[bool] = None
    sync_interval_minutes: Optional[int] = Field(None, ge=1)


class SyncJobResponse(BaseModel):
    model_config = ConfigDict(from_attributes=True)

    id: uuid.UUID
    data_source_id: uuid.UUID
    data_source_name: Optional[str] = None
    status: str
    started_at: datetime
    completed_at: Optional[datetime] = None
    records_processed: int
    records_created: int
    records_updated: int
    records_failed: int
    error_log: Optional[str] = None
    triggered_by: str
