#!/usr/bin/env python3
"""PX3 Lab - Relatorio Google Ads 01-11/08/2026 + auditoria UTM (READ ONLY)."""
import json
from google.ads.googleads.client import GoogleAdsClient

TOK = json.load(open('/opt/mia/config/google_ads_tokens.json'))
CUSTOMER_ID = "2186917336"
START, END = "2026-08-01", "2026-08-11"

cfg = {
    "developer_token": TOK["developer_token"],
    "client_id": TOK["client_id"],
    "client_secret": TOK["client_secret"],
    "refresh_token": TOK["refresh_token"],
    "login_customer_id": TOK["mcc_id"],
    "use_proto_plus": True,
}
client = GoogleAdsClient.load_from_dict(cfg)
ga = client.get_service("GoogleAdsService")

def q(query):
    return ga.search(customer_id=CUSTOMER_ID, query=query)

def micros(v): return (v or 0) / 1_000_000

print("="*78)
print(f"CAMPANHAS COM ATIVIDADE {START} a {END}")
print("="*78)
rows = q(f"""
SELECT campaign.id, campaign.name, campaign.status,
       campaign.advertising_channel_type,
       metrics.impressions, metrics.clicks, metrics.ctr, metrics.average_cpc,
       metrics.cost_micros, metrics.conversions, metrics.all_conversions,
       metrics.cost_per_conversion,
       metrics.search_impression_share,
       metrics.search_budget_lost_impression_share,
       metrics.search_rank_lost_impression_share
FROM campaign
WHERE segments.date BETWEEN '{START}' AND '{END}'
ORDER BY metrics.cost_micros DESC
""")
any_row = False
for r in rows:
    m = r.metrics; c = r.campaign
    any_row = True
    print(f"\n-- {c.name}  [id {c.id}]  status={c.status.name}  canal={c.advertising_channel_type.name}")
    print(f"   impr={m.impressions} cliq={m.clicks} ctr={m.ctr*100:.2f}% cpc=R${micros(m.average_cpc):.2f} "
          f"custo=R${micros(m.cost_micros):.2f}")
    print(f"   conv={m.conversions:.1f} allconv={m.all_conversions:.1f} "
          f"cpa=R${micros(m.cost_per_conversion):.2f}")
    try:
        print(f"   IS={m.search_impression_share*100:.1f}% lost_budget={m.search_budget_lost_impression_share*100:.1f}% "
              f"lost_rank={m.search_rank_lost_impression_share*100:.1f}%")
    except Exception:
        pass
if not any_row:
    print("Nenhuma campanha com dado na janela.")

print("\n" + "="*78)
print("TOTAL AGREGADO DA CONTA na janela")
print("="*78)
rows = q(f"""
SELECT metrics.impressions, metrics.clicks, metrics.cost_micros,
       metrics.conversions, metrics.all_conversions
FROM customer
WHERE segments.date BETWEEN '{START}' AND '{END}'
""")
for r in rows:
    m = r.metrics
    print(f"impr={m.impressions} cliq={m.clicks} custo=R${micros(m.cost_micros):.2f} "
          f"conv={m.conversions:.1f} allconv={m.all_conversions:.1f}")

print("\n" + "="*78)
print("AUDITORIA UTM - final URLs de TODOS os anuncios (qualquer status)")
print("="*78)
rows = q("""
SELECT campaign.name, campaign.status, ad_group.name,
       ad_group_ad.status, ad_group_ad.ad.id,
       ad_group_ad.ad.name, ad_group_ad.ad.type,
       ad_group_ad.ad.final_urls
FROM ad_group_ad
WHERE ad_group_ad.status != 'REMOVED'
ORDER BY campaign.name
""")
for r in rows:
    a = r.ad_group_ad
    urls = list(a.ad.final_urls)
    for u in urls:
        has_utm = "utm_source" in u
        flag = "UTM-OK" if has_utm else "SEM-UTM"
        adname = a.ad.name or f"(RSA {a.ad.id})"
        print(f"[{flag}] camp={r.campaign.name[:28]} | adstatus={a.status.name} | {adname[:22]} | {u}")

print("\n--- final_url_suffix / tracking template (nivel campanha) ---")
rows = q("""
SELECT campaign.name, campaign.status, campaign.final_url_suffix,
       campaign.tracking_url_template
FROM campaign
WHERE campaign.status != 'REMOVED'
""")
for r in rows:
    c = r.campaign
    suf = c.final_url_suffix or "(vazio)"
    tpl = c.tracking_url_template or "(vazio)"
    print(f"{c.status.name:<9} {c.name[:34]:<34} suffix={suf}  tpl={tpl}")

print("\n" + "="*78)
print("CONVERSOES por acao na janela (last_conversion + count)")
print("="*78)
rows = q(f"""
SELECT conversion_action.id, conversion_action.name, conversion_action.status,
       conversion_action.type
FROM conversion_action
WHERE conversion_action.name LIKE '%Site%'
""")
for r in rows:
    ca = r.conversion_action
    print(f"id={ca.id} name={ca.name} status={ca.status.name} type={ca.type_.name}")

print("\n--- allconv por dia e acao na janela ---")
rows = q(f"""
SELECT segments.date, segments.conversion_action_name, metrics.all_conversions
FROM campaign
WHERE segments.date BETWEEN '{START}' AND '{END}' AND metrics.all_conversions > 0
ORDER BY segments.date
""")
found = False
for r in rows:
    found = True
    print(f"{r.segments.date} | {r.segments.conversion_action_name} | allconv={r.metrics.all_conversions:.1f}")
if not found:
    print("Nenhuma conversao >0 na janela (via campaign segments).")
