import json

import httpx

from lnbits.extensions.subdomains.models import Domains


async def cloudflare_create_subdomain(
    domain: Domains, subdomain: str, record_type: str, ip: str
):
    # Call to cloudflare sort of a dry-run - if success delete the domain and wait for payment
    ### SEND REQUEST TO CLOUDFLARE
    url = (
        "https://api.cloudflare.com/client/v4/zones/"
        + domain.cf_zone_id
        + "/dns_records"
    )
    header = {
        "Authorization": "Bearer " + domain.cf_token,
        "Content-Type": "application/json",
    }
    aRecord = subdomain + "." + domain.domain
    cf_response = ""
    async with httpx.AsyncClient() as client:
        try:
            r = await client.post(
                url,
                headers=header,
                json={
                    "type": record_type,
                    "name": aRecord,
                    "content": ip,
                    "ttl": 0,
                    "proxied": False,
                },
                timeout=40,
            )
            cf_response = json.loads(r.text)
        except AssertionError:
            cf_response = "Error occured"
    return cf_response


async def cloudflare_deletesubdomain(domain: Domains, domain_id: str):
    url = (
        "https://api.cloudflare.com/client/v4/zones/"
        + domain.cf_zone_id
        + "/dns_records"
    )
    header = {
        "Authorization": "Bearer " + domain.cf_token,
        "Content-Type": "application/json",
    }
    async with httpx.AsyncClient() as client:
        try:
            r = await client.delete(url + "/" + domain_id, headers=header, timeout=40)
            cf_response = r.text
        except AssertionError:
            cf_response = "Error occured"
