#!/usr/bin/env python3
"""Lista final_urls de todos os ads ativos na conta Ribeiros pra confirmar que nenhum aponta pra agentesclimb.us."""
import json
import subprocess
from pathlib import Path

CUSTOMER_ID = Path("/opt/mia/config/google_ads_ribeiros_customer_id.txt").read_text().strip()
MCC_ID = Path("/opt/mia/config/google_ads_mcc_id.txt").read_text().strip()
DEV_TOKEN = Path("/opt/mia/config/google_ads_developer_token.txt").read_text().strip()
tokens = json.loads(Path("/opt/mia/config/google_ads_tokens.json").read_text())
ACCESS_TOKEN = tokens.get("access_token")
REFRESH_TOKEN = tokens.get("refresh_token")

def refresh_access():
    import urllib.request, urllib.parse
    client_id = tokens.get("client_id")
    client_secret = tokens.get("client_secret")
    data = urllib.parse.urlencode({
        "client_id": client_id,
        "client_secret": client_secret,
        "refresh_token": REFRESH_TOKEN,
        "grant_type": "refresh_token"
    }).encode()
    req = urllib.request.Request("https://oauth2.googleapis.com/token", data=data)
    with urllib.request.urlopen(req) as r:
        return json.loads(r.read())["access_token"]

def query(customer_id, gaql, access):
    import urllib.request
    url = f"https://googleads.googleapis.com/v22/customers/{customer_id}/googleAds:search"
    payload = json.dumps({"query": gaql}).encode()
    req = urllib.request.Request(url, data=payload, method="POST", headers={
        "Authorization": f"Bearer {access}",
        "developer-token": DEV_TOKEN,
        "login-customer-id": MCC_ID,
        "Content-Type": "application/json",
    })
    try:
        with urllib.request.urlopen(req) as r:
            return json.loads(r.read())
    except urllib.error.HTTPError as e:
        return {"error": e.read().decode()}

access = refresh_access()

# 1. Ads ativos com final_urls
gaql_ads = """
SELECT
  campaign.id, campaign.name, campaign.status,
  ad_group.id, ad_group.name, ad_group.status,
  ad_group_ad.ad.id, ad_group_ad.ad.type, ad_group_ad.status,
  ad_group_ad.ad.final_urls
FROM ad_group_ad
WHERE campaign.status = 'ENABLED'
  AND ad_group.status = 'ENABLED'
  AND ad_group_ad.status IN ('ENABLED','PAUSED')
"""

# 2. Campaign-level final URL suffix / tracking template
gaql_camp = """
SELECT campaign.id, campaign.name, campaign.status,
       campaign.tracking_url_template, campaign.final_url_suffix
FROM campaign WHERE campaign.status = 'ENABLED'
"""

# 3. Sitelinks / assets com URL
gaql_assets = """
SELECT asset.id, asset.type, asset.name,
       asset.final_urls, asset.sitelink_asset.link_text
FROM asset
WHERE asset.type IN ('SITELINK','CALL_TO_ACTION','MOBILE_APP','PROMOTION')
LIMIT 100
"""

print("=== ADS ATIVOS (final_urls) ===")
r = query(CUSTOMER_ID, gaql_ads, access)
if "error" in r:
    print("ERR", r["error"][:400])
else:
    seen_urls = {}
    for row in r.get("results", []):
        urls = row.get("adGroupAd", {}).get("ad", {}).get("finalUrls", []) or []
        for u in urls:
            seen_urls[u] = seen_urls.get(u, 0) + 1
    for u, n in sorted(seen_urls.items(), key=lambda x: -x[1]):
        flag = " <<< AGENTESCLIMB.US" if "agentesclimb" in u else ""
        print(f"  {n:3d}x  {u}{flag}")
    print(f"  total ads: {len(r.get('results', []))}")

print("\n=== CAMPANHAS (tracking template + suffix) ===")
r2 = query(CUSTOMER_ID, gaql_camp, access)
if "error" in r2:
    print("ERR", r2["error"][:400])
else:
    for row in r2.get("results", []):
        c = row["campaign"]
        print(f"  [{c['id']}] {c['name']}")
        print(f"    template: {c.get('trackingUrlTemplate','(none)')}")
        print(f"    suffix:   {c.get('finalUrlSuffix','(none)')}")

print("\n=== SITELINKS / ASSETS ===")
r3 = query(CUSTOMER_ID, gaql_assets, access)
if "error" in r3:
    print("ERR", r3["error"][:400])
else:
    for row in r3.get("results", []):
        a = row["asset"]
        urls = a.get("finalUrls", []) or []
        for u in urls:
            flag = " <<< AGENTESCLIMB.US" if "agentesclimb" in u else ""
            print(f"  [{a.get('type')}] {a.get('name','(no name)')}: {u}{flag}")
