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 GetProfileExplore(Property):
    key: Literal['phoneNumber', 'email', 'customer_id', 'user_pseudo_id']
    value: str

class GetProfileExploreRespone(BaseModel):
    status: str = 'ok'
    user_pseudo_id: str
    widgets: list

class GetProfileDetail(Property):
    user_pseudo_id: str

class GetProfile(Property):
    query: str
    start:  Optional[str]         = None
    end:    Optional[str]         = None
    page:    Optional[int]        = 1
    page_size:    Optional[int]   = 50

class GetListProfileRespone(BaseModel):
    status: str = 'ok'
    data: List[dict]
    page: int
    page_size: int
    total_pages: int
    total_records: int
