import uuid
import requests
import base64

class YooKassaPayment:
    def __init__(self, shop_id: str, api_key: str):
        self.shop_id = shop_id
        self.api_key = api_key
        self.auth_token = base64.b64encode(f'{shop_id}:{api_key}'.encode()).decode()

    def create_payment(self, amount: float, currency: str, description: str, return_url: str, order_id: str = None):
        idempotence_key = str(uuid.uuid4())
        headers = {
            'Content-Type': 'application/json',
            'Authorization': f'Basic {self.auth_token}',
            'Idempotence-Key': idempotence_key
        }
        data = {
            "amount": {
                "value": f"{amount:.2f}",
                "currency": currency
            },
            "confirmation": {
                "type": "redirect",
                "return_url": return_url
            },
            "capture": True,
            "description": description,
            "metadata": {
                "order_id": order_id or str(uuid.uuid4())
            }
        }
        response = requests.post("https://api.yookassa.ru/v3/payments", json=data, headers=headers)
        if response.status_code in [200, 201]:
            return response.json()
        else:
            raise Exception(f"Ошибка {response.status_code}: {response.text}")

    def get_payment_status(self, payment_id: str):
        """Получение актуального статуса платежа из YooKassa API"""
        headers = {
            'Content-Type': 'application/json',
            'Authorization': f'Basic {self.auth_token}'
        }
        
        response = requests.get(f"https://api.yookassa.ru/v3/payments/{payment_id}", headers=headers)
        
        if response.status_code == 200:
            return response.json()
        else:
            print(f"Error getting payment status: {response.status_code} {response.text}")
            return None
