from pydantic import BaseModel
from typing import List, Optional, Union, Literal, Dict, Any

class Property(BaseModel):
    property_id: str

class DataResponse(BaseModel):
    status: str = 'ok'
    message: str
    data: Union[List[Dict[str, Any]], Dict[str, Any]]

class SubscriptionFacebookPage(Property):
    page_id: str
    page_access_token: str
    subscribed_fields: List[str]

class SubscriptionLinePage(Property):
    access_token: str

class SubscriptionSMSSender(Property):
    sender_id: str
    provider: str = "infobip"
    display_name: str
    sender_value: str
    type: Literal["alphanumeric", "long_number", "short_code"]
    country: Optional[str] = None
    status: Literal["active", "inactive"] = "active"
    # ThaiBulkSMS API configuration
    api_key: Optional[str] = None
    api_secret: Optional[str] = None

class SubscriptionEmailSender(Property):
    sender_id: str
    provider: str = "infobip"
    display_name: str
    from_email: str
    from_name: str
    reply_to_email: Optional[str] = None
    domain: Optional[str] = None
    status: Literal["active", "inactive"] = "active"
    # Gmail SMTP configuration
    smtp_server: Optional[str] = None
    smtp_port: Optional[int] = None
    smtp_username: Optional[str] = None
    smtp_password: Optional[str] = None
    encryption: Optional[Literal["TLS", "SSL"]] = None
    # ThaiBulkSMS API configuration
    api_key: Optional[str] = None
    api_secret: Optional[str] = None