from typing import Union
from sqlalchemy.orm import Session
from src.core.database import SessionCelery
from src.apps.merchants.schemas.merchant_settings import MerchantSettingsSchema
from src.apps.merchants.models.merchant_settings import MerchantSettings


def get_setting_record(
    field_name: str,
    key: str,
    merchant_id: int,
    return_raw: bool = False,
) -> Union[MerchantSettings, MerchantSettingsSchema]:
    """
    Fetch the setting record for merchant
    """
    with SessionCelery() as db:
        setting = (
            db.query(MerchantSettings)
            .filter(
                MerchantSettings.merchant_id == merchant_id,
                MerchantSettings.key == key,
                MerchantSettings.field_name == field_name,
            )
            .first()
        )
        
        if setting:
            if return_raw:
                return setting
            return MerchantSettingsSchema.model_validate(setting)
        return None
