"""Pydantic schemas for General Affairs module."""

from datetime import date, datetime

from pydantic import BaseModel, ConfigDict


# ── Operators ────────────────────────────────────────────────────────────────

class OperatorResponse(BaseModel):
    id: int
    nama: str
    posisi: str       # role nama
    is_active: bool


# ── Jadwal ───────────────────────────────────────────────────────────────────

class JadwalCreate(BaseModel):
    user_id: int
    shift_id: int
    tanggal: date


class JadwalBulkCreate(BaseModel):
    items: list[JadwalCreate]


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

    id: int
    spbu_id: int
    user_id: int
    shift_id: int
    tanggal: date
    user_nama: str | None = None
    shift_nama: str | None = None


# ── Absensi ──────────────────────────────────────────────────────────────────

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

    id: int
    spbu_id: int
    shift_id: int
    tanggal: date
    foto_url: str | None = None
    foto_eksif_waktu: str | None = None
    status: str
    uploaded_by_nama: str | None = None
    uploaded_at: datetime | None = None
    reviewed_by_nama: str | None = None
    reviewed_at: datetime | None = None
    shift_nama: str | None = None


class AbsensiSlotOperator(BaseModel):
    id: int
    nama: str


class AbsensiSlotResponse(BaseModel):
    absensi: AbsensiResponse | None = None
    operators: list[AbsensiSlotOperator] = []


# ── Housekeeping ──────────────────────────────────────────────────────────────

class HousekeepingItemResponse(BaseModel):
    model_config = ConfigDict(from_attributes=True)
    id: int
    deskripsi: str
    urutan: int


class HousekeepingFotoResponse(BaseModel):
    model_config = ConfigDict(from_attributes=True)
    id: int
    tipe: str
    foto_url: str
    urutan: int


class HousekeepingResponse(BaseModel):
    model_config = ConfigDict(from_attributes=True)
    id: int
    spbu_id: int
    shift_id: int | None = None
    tanggal: date
    status: str
    uploaded_by_nama: str | None = None
    uploaded_at: datetime | None = None
    reviewed_by_nama: str | None = None
    reviewed_at: datetime | None = None
    items: list[HousekeepingItemResponse] = []
    fotos: list[HousekeepingFotoResponse] = []


# ── Sapras ────────────────────────────────────────────────────────────────────

class SaprasItemResponse(BaseModel):
    model_config = ConfigDict(from_attributes=True)
    id: int
    kegiatan: str
    foto_sebelum_url: str | None = None
    foto_sesudah_url: str | None = None
    urutan: int


class SaprasResponse(BaseModel):
    model_config = ConfigDict(from_attributes=True)
    id: int
    spbu_id: int
    tanggal: date
    catatan: str | None = None
    status: str
    uploaded_by_nama: str | None = None
    uploaded_at: datetime | None = None
    reviewed_by_nama: str | None = None
    reviewed_at: datetime | None = None
    items: list[SaprasItemResponse] = []
