from typing import List

from pydantic import BaseModel, ConfigDict, Field


class SettingsBase(BaseModel):
    """Base schema for application settings."""

    imap_server: str
    imap_username: str
    search_folder: str = "INBOX"
    move_to_folder: str | None = None
    mark_as_read: bool = False
    email_check_interval: int = 15
    auto_add_new_senders: bool = False
    auth_username: str | None = None


class SettingsCreate(SettingsBase):
    """Schema for creating or updating settings, including the IMAP password."""

    imap_password: str
    auth_password: str | None = None


class Settings(SettingsBase):
    """Schema for retrieving settings, with password excluded by default."""

    id: int
    imap_password: str | None = Field(None, exclude=True)
    auth_password: str | None = Field(None, exclude=True)
    locked_fields: List[str] = []

    model_config = ConfigDict(from_attributes=True)
