from pydantic import BaseModel
from typing import Optional
from datetime import datetime

# --- Master Account Schemas ---
class MasterAccountBase(BaseModel):
    social_media_name: str
    icon_image: Optional[str] = None
    account_type: Optional[str] = None

class MasterAccountCreate(MasterAccountBase):
    pass

class MasterAccountUpdate(BaseModel):
    social_media_name: Optional[str] = None
    icon_image: Optional[str] = None
    account_type: Optional[str] = None

class MasterAccountOut(MasterAccountBase):
    id: int
    created_at: datetime
    updated_at: datetime
    # is_deleted: Optional[bool] = None

    class Config:
        from_attributes = True

# --- Connected Account Schemas ---
class ConnectedAccountBase(BaseModel):
    master_account_id: int
    store_id: Optional[int] = None
    branch_id: Optional[int] = None
    user_id: Optional[int] = None
    token: Optional[str] = None
    permission: Optional[str] = None
    expires_at: Optional[int] = None
    external_account_id: Optional[str] = None
    external_account_name: Optional[str] = None

class ConnectedAccountCreate(ConnectedAccountBase):
    pass

class ConnectedAccountUpdate(BaseModel):
    store_id: Optional[int] = None
    branch_id: Optional[int] = None
    user_id: Optional[int] = None
    token: Optional[str] = None
    permission: Optional[str] = None

class ConnectedAccountOut(ConnectedAccountBase):
    id: int
    created_at: datetime
    updated_at: datetime
    master_account: Optional[MasterAccountOut] = None
    
    # is_deleted: Optional[bool] = None

    class Config:
        from_attributes = True

#delete account
class DeleteAccountResponse(BaseModel):
    success:bool
    message:str
    data:Optional[dict] = None


class FBUpdateConnectedAccountRequest(BaseModel):
    code:str
    state:str
    store_id: Optional[int] = None
    branch_id: Optional[int] = None
    user_id: Optional[int] = None
    master_account_id: Optional[int] = None

class FBUpdateConnectedAccountResponse(BaseModel):
    # success: bool
    # message: str
    data: Optional[list[ConnectedAccountOut]] = None