# FASTag bill payment test via GoterPay
from recharge.services.goterpay_client import get_goterpay_client, GoterPayError
from recharge.services.goterpay_api import GoterPayError
from typing import Optional
import string, secrets

def make_txn_id(prefix: str = "VP", max_len: int = 10) -> str:
    alphabet = string.ascii_uppercase + string.digits
    prefix = (prefix or "").upper()
    need = max(0, max_len - len(prefix))
    return (prefix + "".join(secrets.choice(alphabet) for _ in range(need)))[:max_len]

def normalize_plate(plate: str) -> str:
    return (plate or "").upper().replace(" ", "")

client = get_goterpay_client()

# --- Fill these ---
provider_code = "BAJF"            # e.g. Bajaj FASTag
vehicle_plate = "AP15BE3333"      # your test plate
amount_rupees = 100               # test amount

txnid = make_txn_id(prefix="VP", max_len=10)   # <= 10 chars
number = normalize_plate(vehicle_plate)        # provider expects uppercase, no spaces

try:
    res = client.bill_pay(
        txnid=txnid,
        number=number,
        amount=amount_rupees,
        operator_code=provider_code,
        optional1=None,           # we’re ignoring optional1 as per your decision
        # subwallet="..."         # ONLY pass if your settings lack subwallet; otherwise omit
    )
    print("BILL PAY SUCCESS:", res)
except GoterPayError as e:
    print("BILL PAY FAILED:", str(e))
    print("Status code:", getattr(e, "status_code", None))
    print("Payload:", getattr(e, "payload", None))

# BILL PAY SUCCESS: {'TxnId': 'VPO18QR5ZT', 'status': 'SUCCESS', 'Number': 'AP15BE3333', 'amount': '100', 'optId': 'MK015244BAAKQ3DGH000', 'VoucherCode': 'null', 'operator': 'BAJF', 'service': 'FASTag', 'bal': '390.178', 'resText': 'Payment Success Processed', 'billAmount': '99.9', 'Comi': '0.100'}


