from django.db import models from django.db.models import TextChoices from django.utils.translation import gettext_lazy as _ from apps.gooyal_oauth2.settings import oauth2_settings from utils.clients.sms.sms import BaseSMSClient from utils.models import BaseModel from utils.clients.sms.payam_sms.client import PayamSMSClient from utils.clients.sms.mobin_sms.client import MobinSMSClient from utils.clients.sms.fake.client import FakeClient import logging logger = logging.getLogger(__name__) class SMSClienChoises(TextChoices): FAKE = "fake", _("fake") PAYAM_SMS = 'payam_sms', _('payam_sms') MOBIN_SMS = 'mobin_sms', _('mobin_sms') class SMSPolicy(BaseModel): application = models.ForeignKey(oauth2_settings.APPLICATION_MODEL, on_delete=models.PROTECT, related_name='+', null=True, blank=True, unique=True) preferred = models.CharField(max_length=16, choices=SMSClienChoises.choices, default=SMSClienChoises.FAKE) def __str__(self): return self.get_preferred_display() @staticmethod def get_client() -> BaseSMSClient: policy = SMSPolicy.objects.get_or_create(application=None)[0] if policy.preferred == SMSClienChoises.MOBIN_SMS: return MobinSMSClient() elif policy.preferred == SMSClienChoises.PAYAM_SMS: return PayamSMSClient() else: return FakeClient()