from typing import Optional
from pydantic.types import Json
from src.core.utils.enums import SettingsInputFieldTypes
from pydantic import Field
from src.apps.base.schemas.common import BaseSchema


# Shared properties
class SiteSettingsBase(BaseSchema):
    key: Optional[str] = Field(
        description="Key of SiteSettings. The primary identifier"
    )
    value: Optional[str] = Field(
        description="Form Value, inclusive of alphabetical characters only"
    )
    label: Optional[str] = Field(
        description="Form label, inclusive of alphabetical characters only"
    )
    group: Optional[str] = Field(
        description="A valid string, can be used for categorizing settings."
    )
    field_type: Optional[SettingsInputFieldTypes] = Field(
        description="HTML input field type"
    )
    field_options: Optional[Json] = Field(
        description="Optional key value pairs as an JSON object, Used when HTML input type is selct or multiselect, for storing options mapping as key value pairs"
    )


class SiteSettingsSchema(SiteSettingsBase):
    id: int = Field(description="Id of SiteSettings resource")
