import logging
from payments.models import RechargePaymentSummary
from recharge.models import Operator, Circle, RechargeTransaction
from notifications.services import send_notification
from commissions.utils import record_commission_split
from django.utils.timezone import now


def handle_recharge_outcome(
        user,
        transaction,
        order_id,
        status_title,
        status_message,
        amount,
        operator,
        vendor_code,
        gateway_ref,
        paid_via_gateway,
        service,
        provider_commission,
    ):
    log = logging.getLogger(__name__)
    log.info("Inside handle recharge outcome")
    log.info(status_title)
    if status_title.lower() == "success":
        split_data = None
        log.info("Inside handle_recharge_outcome : Success block")
        # ✅ Only do commission split if some payment came via gateway
        if float(paid_via_gateway) > 0 and service.lower() == "mobile":
            log.info("=========================== record commission split ===============================")
            try:
                split_data = record_commission_split(
                                order_id,
                                transaction,
                                user,
                                operator,
                                vendor_code,
                                amount,
                                float(paid_via_gateway),
                                service,
                                provider_commission
                            )
                log.info("=========================== record commission split success ===============================")
            except Exception:
                log.exception("record_commission_split failed for order_id=%s", order_id)

            # split_data = ""
            # log.info("----------------------------split_data----------------------------")
            # log.info(split_data)

        send_notification(
            user=user,
            type_key="recharge_success",
            context={
                "user": user, "number": transaction.number, "amount": amount,
                "order_id": order_id, "operator": transaction.operator,
                "created_at": transaction.created_at, "year": now().year,
                "payment_id": gateway_ref or "WALLET-ONLY","Service":service,
            },
            message=f"Recharge of INR {amount} for {transaction.number} was successful."
        )

        # ✅ Run role commission notifications only if split_data exists
        if split_data:
            for role, type_key, amount_key in [
                ("user", "commission_user", "user_amount"),
                ("referral", "commission_referral", "referral_amount"),
                ("vendor_refferal", "commission_vendor_referral", "vendor_refferal_amount"),
            ]:
                role_user = user if role == "user" else split_data.get(f"{role}_user")
                role_amount = split_data.get(amount_key)
                if role_user and role_amount:
                    send_notification(
                        user=role_user,
                        type_key=type_key,
                        context={"amount": role_amount, "order_id": order_id, "user": role_user, "year": now().year},
                        message=f"You earned INR {role_amount} as {role.replace('_', ' ')} cashback."
                    )

    elif status_title.lower() in ["failure","failed", "error"]:
        from payments.views import process_recharge_refund
        log.info("Inside handle_recharge_outcome : failure block")
        try:
            summary = RechargePaymentSummary.objects.get(order_id=order_id).first()
            # if summary:
            #     # keep message; do not downgrade if it’s already Success
            #     if (summary.recharge_status or "") not in ("Success",):
            #         summary.recharge_status = "Failure"
            #         summary.status_message = status_message
            #         summary.save(update_fields=["recharge_status","status_message"])


            # process_recharge_refund(summary)
            # log.info("After process recharge reffund")
        except Exception:
            log.exception("could not sync summary on failure")

        send_notification(
            user=user,
            type_key="recharge_failed",
            context={
                "user": user, "number": transaction.number, "amount": amount,
                "order_id": order_id, "operator": transaction.operator,
                "created_at": transaction.created_at, "year": now().year,
                "payment_id": gateway_ref or "WALLET-ONLY",
                "failure_reason": status_message,"Service":service,
            },
            message=f"Recharge of INR {amount} for {transaction.number} failed. "
                    f"Amount has been (or will be) credited to your ViralPe wallet. {status_message}"
        )
