import httpx
from app.core.config import settings

SHOPIFY_API = f"https://{settings.SHOPIFY_STORE_URL}/admin/api/2024-01"
HEADERS = {
    "X-Shopify-Access-Token": settings.SHOPIFY_ACCESS_TOKEN,
    "Content-Type": "application/json",
}


async def get_shopify_order(order_id: str) -> dict | None:
    """
    Tries regular orders first, falls back to draft orders.
    Returns the order dict or None.
    """
    async with httpx.AsyncClient() as client:
        # 1. Try regular order
        r = await client.get(f"{SHOPIFY_API}/orders/{order_id}.json", headers=HEADERS)
        if r.status_code == 200:
            order = r.json().get("order")
            if order:
                order["_is_draft"] = False
                return order

        # 2. Try draft order
        r = await client.get(f"{SHOPIFY_API}/draft_orders/{order_id}.json", headers=HEADERS)
        if r.status_code == 200:
            order = r.json().get("draft_order")
            if order:
                order["_is_draft"] = True
                return order

    return None


async def mark_order_paid(order_id: str, amount: str, is_draft: bool = False) -> dict:
    """
    For draft orders  → complete the draft (converts it to a real order, marks paid).
    For real orders   → post a capture transaction.
    """
    async with httpx.AsyncClient() as client:
        if is_draft:
            # Complete the draft order — this marks it as paid in Shopify
            r = await client.post(
                f"{SHOPIFY_API}/draft_orders/{order_id}/complete.json",
                headers=HEADERS,
                params={"payment_pending": False},  # False = mark as paid immediately
            )
            return r.json()
        else:
            # Regular order — post a capture transaction
            r = await client.post(
                f"{SHOPIFY_API}/orders/{order_id}/transactions.json",
                headers=HEADERS,
                json={
                    "transaction": {
                        "kind": "capture",
                        "status": "success",
                        "amount": amount,
                    }
                },
            )
            return r.json()