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 OfflineTableBase(Property):
    table_name: str

class InsertOfflineDataRequest(Property):
    table_name: str
    data: list

class DeleteOfflineDataRequest(OfflineTableBase):
    version_key: str

class ManageOfflineEventRequest(OfflineTableBase):
    event_name: str
    event_filter: Optional[List] = None
    event_property: Optional[List] = None

class ManageOfflineSchemaRequest(OfflineTableBase):
    schemas: list = []

class ManageOfflineEditStatusRequest(OfflineTableBase):
    status: Literal['active', 'inactive']

class ManageOfflineRenameColumnRequest(OfflineTableBase):
    old_name: str
    new_name: str

class ManageOfflineDeleteColumnRequest(OfflineTableBase):
    column_names: List[str]