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

class Property(BaseModel):
    property_id: str

class BaseAutomation(Property):
    automation_id: str

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

class CreateAutomation(Property):
    body:dict
    name: Optional[str] = None
    automation_id: Optional[str] = None

class GetAutomation(Property):
    automation_id: Union[Literal["all"], str]
    display_type: Literal['list', 'calendar'] = 'list'
    date_start: Optional[str] = None
    date_end: Optional[str] = None
    status: Optional[str] = 'all'
    start: Optional[int] = None
    length: Optional[int] = None
    page: Optional[int] = None
    page_size: Optional[int] = None
    filter: Optional[List[str]] = None
    sort_by: Optional[str] = None
    order: Optional[Literal['asc', 'desc']] = None

class ExecuteAutomation(Property):
    automation_id: str

class AutomationStatusUpdate(BaseAutomation):
    status: Literal[True, False]

class GetAudienceForAutomation(Property):
    audience_id: str