import requests
import hashlib
import hmac
from django.conf import settings


class PaystackAPI:
    """Paystack API wrapper"""

    def __init__(self):
        self.secret_key = settings.PAYSTACK_SECRET_KEY
        self.public_key = settings.PAYSTACK_PUBLIC_KEY
        self.base_url = settings.PAYSTACK_BASE_URL
        self.headers = {
            'Authorization': f'Bearer {self.secret_key}',
            'Content-Type': 'application/json',
        }

    def initialize_transaction(self, email, amount, reference, callback_url=None, metadata=None):
        """
        Initialize a Paystack transaction
        Amount should be in kobo (smallest currency unit)
        """
        url = f"{self.base_url}/transaction/initialize"

        data = {
            'email': email,
            'amount': amount,  # Amount in kobo
            'reference': reference,
            'currency': 'KES',
        }

        if callback_url:
            data['callback_url'] = callback_url

        if metadata:
            data['metadata'] = metadata

        try:
            response = requests.post(url, json=data, headers=self.headers)
            return response.json()
        except Exception as e:
            return {'status': False, 'message': str(e)}

    def verify_transaction(self, reference):
        """Verify a transaction by reference"""
        url = f"{self.base_url}/transaction/verify/{reference}"

        try:
            response = requests.get(url, headers=self.headers)
            return response.json()
        except Exception as e:
            return {'status': False, 'message': str(e)}

    def verify_webhook_signature(self, payload, signature):
        """Verify Paystack webhook signature"""
        computed_signature = hmac.new(
            self.secret_key.encode('utf-8'),
            payload,
            hashlib.sha512
        ).hexdigest()
        return hmac.compare_digest(computed_signature, signature)


# Singleton instance
paystack = PaystackAPI()
