"""Pydantic Schemas für Request/Response."""
from datetime import date, datetime
from typing import Optional, Literal
from pydantic import BaseModel, Field

Status = Literal["open", "interview", "offer", "rejected", "withdrawn"]


class ApplicationBase(BaseModel):
    company: str = Field(..., min_length=1, max_length=200)
    position: str = Field(..., min_length=1, max_length=200)
    location: Optional[str] = None
    source: Optional[str] = None
    status: Status = "open"
    applied_at: Optional[date] = None
    contact_name: Optional[str] = None
    contact_email: Optional[str] = None
    job_id: Optional[str] = None
    notes: Optional[str] = None


class ApplicationCreate(ApplicationBase):
    pass


class ApplicationUpdate(BaseModel):
    company: Optional[str] = None
    position: Optional[str] = None
    location: Optional[str] = None
    source: Optional[str] = None
    status: Optional[Status] = None
    applied_at: Optional[date] = None
    contact_name: Optional[str] = None
    contact_email: Optional[str] = None
    job_id: Optional[str] = None
    notes: Optional[str] = None


class ApplicationOut(ApplicationBase):
    id: int
    last_update: Optional[datetime] = None

    model_config = {"from_attributes": True}
