from pydantic import BaseModel, Field
from typing import Optional, Literal

class Property(BaseModel):
    property_id: str

class SMSSenderBase(BaseModel):
    id: str
    provider: str
    display_name: str
    sender_value: str
    type: Literal["alphanumeric", "long_number", "short_code"]
    status: Literal["active", "inactive"]
    country: Optional[str] = None
    provider_account_id: Optional[str] = None

class CreateSMSSender(Property, SMSSenderBase):
    pass

class UpdateSMSSender(Property):
    id: Optional[str] = None
    provider: Optional[str] = None
    display_name: Optional[str] = None
    sender_value: Optional[str] = None
    type: Optional[Literal["alphanumeric", "long_number", "short_code"]] = None
    status: Optional[Literal["active", "inactive"]] = None
    country: Optional[str] = None
    provider_account_id: Optional[str] = None

class EmailSenderBase(BaseModel):
    id: str
    provider: str
    display_name: str
    from_email: str
    from_name: str
    status: Literal["active", "inactive"]
    reply_to_email: Optional[str] = None
    domain: Optional[str] = None
    provider_account_id: Optional[str] = None

class CreateEmailSender(Property, EmailSenderBase):
    pass

class UpdateEmailSender(Property):
    id: Optional[str] = None
    provider: Optional[str] = None
    display_name: Optional[str] = None
    from_email: Optional[str] = None
    from_name: Optional[str] = None
    status: Optional[Literal["active", "inactive"]] = None
    reply_to_email: Optional[str] = None
    domain: Optional[str] = None
    provider_account_id: Optional[str] = None
