from pydantic import BaseModel, Field
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 ManageAdAccountRequestData(BaseModel):
    channel: Literal['facebook', 'google_customer_match']
    ad_account_id: str
    name: str

class ManageAdAccountRequest(Property):
    data: List[ManageAdAccountRequestData]

class AdAccountData(BaseModel):
    channel: Literal['facebook', 'google_customer_match']
    ad_account_id: str

class AudienceLink(BaseModel):
    audience_id: str
    methods: List[Literal['APPEND', 'DELETE']]

class ManageAdAccountAudienceRequest(Property):
    ad_account_ids: List[AdAccountData] = Field(..., min_length=1)
    audiences: List[AudienceLink] = Field(..., min_length=1)