from pydantic import BaseModel
from typing import Optional, List, Dict, Any
from datetime import datetime


class MessageResponse(BaseModel):
    message: str


class MerchantProviderConfigResponse(BaseModel):
    onboarding_status: str
    is_active: bool
    is_active_provider: bool
    config_data: Optional[Dict[str, Any]] = None


class AdminMerchantProviderConfigResponse(BaseModel):
    provider_id: int
    is_active: bool
    onboarding_status: str
    config_data: Optional[Dict[str, Any]] = None


class PaymentProviderResponse(BaseModel):
    id: int
    name: str
    slug: str
    description: Optional[str]
    logo_url: Optional[str]
    is_active: bool
    is_default: bool
    supported_payment_methods: Optional[Dict[str, bool]]
    config: Optional[MerchantProviderConfigResponse] = None

    class Config:
        from_attributes = True


class OnboardingFieldSchema(BaseModel):
    key: str
    label: str
    type: str  # "text" | "password" | "textarea"
    required: bool
    help_text: Optional[str] = None


class OnboardingSchemaResponse(BaseModel):
    fields: List[OnboardingFieldSchema]


class OnboardingStateResponse(BaseModel):
    provider_id: int
    onboarding_status: str
    schema_: Optional[OnboardingSchemaResponse] = None
    completed_fields: List[str] = []

    class Config:
        populate_by_name = True


class SelectProviderResponse(BaseModel):
    message: str
    active_provider_id: int


class IframeConfigResponse(BaseModel):
    provider_slug: str
    sdk_url: str
    api_key: str
    merchant_id: str
    mode: str
    extra: Dict[str, Any] = {}
