import os
import requests
from dotenv import load_dotenv

# Load .env values
load_dotenv()

# ✅ Read environment variables
TOYYIBPAY_SECRET_KEY = os.getenv("TOYYIBPAY_SECRET_KEY")
TOYYIBPAY_CATEGORY_CODE = os.getenv("TOYYIBPAY_CATEGORY_CODE")
TOYYIBPAY_RETURN_URL = os.getenv("TOYYIBPAY_RETURN_URL", "http://localhost:5000/thank-you")
TOYYIBPAY_CALLBACK_URL = os.getenv("TOYYIBPAY_CALLBACK_URL", "http://localhost:5000/toyyibpay-callback")

# ✅ Safety check
print("💡 TOYYIBPAY_SECRET_KEY:", TOYYIBPAY_SECRET_KEY)
print("💡 TOYYIBPAY_CATEGORY_CODE:", TOYYIBPAY_CATEGORY_CODE)
print("💡 RETURN URL:", TOYYIBPAY_RETURN_URL)
print("💡 CALLBACK URL:", TOYYIBPAY_CALLBACK_URL)

def create_bill(customer_name, email, phone, amount, order_id):
    bill_name = f"Order {order_id}"[:30]  # ✅ limit to 30 chars max

    payload = {
        "userSecretKey": TOYYIBPAY_SECRET_KEY,
        "categoryCode": TOYYIBPAY_CATEGORY_CODE,
        "billName": bill_name,
        "billDescription": "Product Purchase on Ecobiz",
        "billPriceSetting": 1,
        "billPayorInfo": 1,
        "billAmount": int(amount * 100),  # Must be in cents
        "billReturnUrl": TOYYIBPAY_RETURN_URL,
        "billCallbackUrl": TOYYIBPAY_CALLBACK_URL,
        "billExternalReferenceNo": order_id,
        "billTo": customer_name,
        "billEmail": email,
        "billPhone": phone,
        "billSplitPayment": 0,
        "billSplitPaymentArgs": "",
        "billPaymentChannel": 0,
        "billContentEmail": "Thank you for your payment"
    }
    # ✅ Print payload for debug
    print("📦 Payload sent to ToyyibPay:")
    for k, v in payload.items():
        print(f"  {k}: {v}")

    try:
        response = requests.post("https://toyyibpay.com/index.php/api/createBill", data=payload)
        print("🔁 ToyyibPay Response Status:", response.status_code)
        print("🔁 ToyyibPay Response Text:", response.text)

        if response.status_code == 200:
            data = response.json()
            if isinstance(data, list) and "BillCode" in data[0]:
                return data[0]
            else:
                print("❌ ToyyibPay returned invalid response structure:", data)
        else:
            print("❌ ToyyibPay returned error status:", response.status_code)
    except Exception as e:
        print("❌ Exception while creating bill:", str(e))

    return None
