import uuid
import requests
from django.conf import settings


PAYSTACK_INIT_URL = "https://api.paystack.co/transaction/initialize"
PAYSTACK_VERIFY_URL = "https://api.paystack.co/transaction/verify/{reference}"


def paystack_enabled() -> bool:
    return bool(getattr(settings, "PAYSTACK_SECRET_KEY", ""))


def new_reference(prefix: str = "HOL") -> str:
    return f"{prefix}_{uuid.uuid4().hex[:24]}"


def initialize_transaction(*, email: str, amount_ngn: int, callback_url: str, metadata: dict) -> dict:
    """Returns Paystack initialize payload (authorization_url, access_code, reference)."""
    headers = {
        "Authorization": f"Bearer {settings.PAYSTACK_SECRET_KEY}",
        "Content-Type": "application/json",
    }
    payload = {
        "email": email or getattr(settings, "ADMIN_NOTIFY_EMAIL", "admin@example.com"),
        "amount": int(amount_ngn) * 100,  # kobo
        "callback_url": callback_url,
        "metadata": metadata or {},
    }
    resp = requests.post(PAYSTACK_INIT_URL, json=payload, headers=headers, timeout=30)
    resp.raise_for_status()
    return resp.json()


def verify_transaction(reference: str) -> dict:
    headers = {"Authorization": f"Bearer {settings.PAYSTACK_SECRET_KEY}"}
    resp = requests.get(PAYSTACK_VERIFY_URL.format(reference=reference), headers=headers, timeout=30)
    resp.raise_for_status()
    return resp.json()
