from django.core.management.base import BaseCommand
from django.conf import settings
import json

from recharge.services.goterpay_api import GoterPayAPI, GoterPayConfig, GoterPayError


class Command(BaseCommand):
    help = "Check mobile info for a given number via GoterPay API (uses settings.RECHARGE_PROVIDERS['goterpay'])"

    def add_arguments(self, parser):
        parser.add_argument("mobile", type=str, help="Mobile number to check")
        parser.add_argument("--timeout", type=int, default=20, help="HTTP timeout seconds")

    def handle(self, *args, **opts):
        mobile = opts["mobile"]
        timeout = opts["timeout"]

        goter_cfg = settings.RECHARGE_PROVIDERS.get("goterpay", {}) or {}
        mid = goter_cfg.get("mid")
        mkey = goter_cfg.get("mkey")
        subwallet = goter_cfg.get("subwallet")  # not required for mobile_info

        if not mid or not mkey:
            self.stderr.write(self.style.ERROR("Missing Goter creds: RECHARGE_PROVIDERS['goterpay']['mid'/'mkey']"))
            return

        api = GoterPayAPI(GoterPayConfig(mid=mid, mkey=mkey, subwallet=subwallet, timeout=timeout))

        self.stdout.write(self.style.NOTICE(f"Checking mobile info for: {mobile}"))
        try:
            resp = api.mobile_info(mobile)
        except GoterPayError as ge:
            self.stderr.write(self.style.ERROR(f"GoterPayError: {ge} [status={ge.status_code}]"))
            if ge.payload:
                self.stderr.write(str(ge.payload))
            return
        except Exception as e:
            self.stderr.write(self.style.ERROR(f"Unexpected error: {e}"))
            return

        self.stdout.write(self.style.SUCCESS("✅ API call successful"))
        try:
            self.stdout.write(json.dumps(resp, indent=2, ensure_ascii=False))
        except Exception:
            self.stdout.write(str(resp))

        op = resp.get("operator")
        circle = resp.get("circle")
        status = resp.get("status")
        msg = resp.get("message") or resp.get("resText") or ""
        self.stdout.write("\n--- Summary ---")
        self.stdout.write(f"Status : {status}")
        self.stdout.write(f"Operator: {op}")
        self.stdout.write(f"Circle  : {circle}")
        if msg:
            self.stdout.write(f"Message : {msg}")


# from recharge.services.provider_utils import get_source_value
# src = get_source_value()
# operators = Operator.objects.filter(source__iexact=src, service_type__iexact=service_type)
# circles   = Circle.objects.filter(source__iexact=src)
