import httpx from gapido_auth.config import Settings from gapido_auth.domain.ports import SmsClient from gapido_auth.infrastructure.debug_sms_client import DebugSmsClient, DebugSmsStore from gapido_auth.infrastructure.kavenegar_client import KavenegarSmsClient from gapido_auth.infrastructure.sms_ir_client import SmsIrSmsClient def create_sms_client( settings: Settings, transport: httpx.AsyncBaseTransport | None = None, debug_store: DebugSmsStore | None = None, ) -> SmsClient: """Build the configured SMS provider strategy for the worker process.""" match settings.sms_provider: case "kavenegar": return KavenegarSmsClient(settings.kavenegar_api_key, transport=transport) case "sms_ir": return SmsIrSmsClient(settings.sms_ir_api_key, transport=transport) case "debug": if debug_store is None: raise ValueError("debug_store is required for debug SMS provider") return DebugSmsClient(debug_store, ttl_seconds=settings.demo_debug_sms_ttl_seconds) def get_sms_template(settings: Settings) -> str: """Return the provider-specific OTP template identifier used in queued SMS jobs.""" match settings.sms_provider: case "kavenegar": return settings.kavenegar_login_template case "sms_ir": return str(settings.sms_ir_verify_template_id) case "debug": return "debug-otp"