"""
Common DTOs

Reusable data transfer objects for common patterns.
"""

from dataclasses import dataclass
from datetime import datetime
from typing import Optional
from uuid import UUID

from .base import BaseDTO


@dataclass
class IdDTO(BaseDTO):
    """DTO for ID-only responses."""

    id: str | UUID


@dataclass
class SlugDTO(BaseDTO):
    """DTO for slug-based resources."""

    id: str | UUID
    slug: str
    name: str


@dataclass
class TimestampDTO(BaseDTO):
    """DTO for timestamp fields."""

    created_at: datetime
    updated_at: datetime


@dataclass
class AuditDTO(BaseDTO):
    """DTO for audit trail information."""

    created_at: datetime
    created_by: Optional[str] = None
    created_by_name: Optional[str] = None
    updated_at: Optional[datetime] = None
    updated_by: Optional[str] = None
    updated_by_name: Optional[str] = None
    deleted_at: Optional[datetime] = None
    deleted_by: Optional[str] = None


@dataclass
class TenantDTO(BaseDTO):
    """DTO for tenant information."""

    id: str
    name: str
    slug: str
    domain: Optional[str] = None
    is_active: bool = True


@dataclass
class SelectOptionDTO(BaseDTO):
    """DTO for select/dropdown options."""

    value: str
    label: str
    disabled: bool = False
    icon: Optional[str] = None
    description: Optional[str] = None


@dataclass
class FileDTO(BaseDTO):
    """DTO for file references."""

    id: str
    name: str
    url: str
    size: int
    mime_type: str
    extension: Optional[str] = None
    thumbnail_url: Optional[str] = None
