from datetime import datetime
from uuid import UUID

from pydantic import BaseModel


class GroupSettingsUpdate(BaseModel):
    """Payload for creating or updating group credentials.
    Secrets are accepted as plaintext here and immediately encrypted before storage.
    They are never returned in any response.
    """

    campflow_api_token: str | None = None
    service_account_json: str | None = None  # full JSON string content
    google_admin_email: str | None = None
    group_email: str | None = None  # Explicit group selection for super-admins

    # Mailing
    email_account: str | None = None
    email_password: str | None = None
    pdf_filename: str | None = None

    # Server
    imap_server: str | None = None
    imap_port: int | None = None
    smtp_server: str | None = None
    smtp_port: int | None = None

    # Automation
    auto_mail_recipient: str | None = None


class GroupSettingsMeta(BaseModel):
    """Public-safe metadata about a group's configuration (no secrets)."""

    id: UUID
    group_email: str
    google_admin_email: str | None
    has_campflow_token: bool
    has_service_account: bool
    has_email_password: bool

    # Mailing
    email_account: str | None
    pdf_filename: str | None

    # Server
    imap_server: str | None
    imap_port: int | None
    smtp_server: str | None
    smtp_port: int | None

    # Automation
    auto_mail_recipient: str | None

    updated_at: datetime

class LogEntrySchema(BaseModel):
    id: UUID
    group_email: str
    user_email: str
    action: str
    details: str | None
    timestamp: datetime

    class Config:
        from_attributes = True
