#!/usr/bin/env python3
"""Pola harian trafik 'Flint Hill' + korelasinya dengan event sampah, pembanding Surabaya."""
import os
from datetime import date, timedelta
from google.oauth2 import service_account
from googleapiclient.discovery import build

creds = service_account.Credentials.from_service_account_file(
    os.path.expanduser("~/.hermes/gsc_service_account.json"),
    scopes=["https://www.googleapis.com/auth/analytics.readonly"])
data = build("analyticsdata", "v1beta", credentials=creds, cache_discovery=False)
P = "properties/478760195"
e = date.today() - timedelta(days=1)
a, b = (e - timedelta(days=27)).isoformat(), e.isoformat()


def rep(dims, mets, limit=40, filter_=None):
    body = {"dateRanges": [{"startDate": a, "endDate": b}],
            "dimensions": [{"name": d} for d in dims],
            "metrics": [{"name": m} for m in mets],
            "limit": limit}
    if filter_:
        body["dimensionFilter"] = filter_
    return data.properties().runReport(property=P, body=body).execute().get("rows", [])


print("=== sesi per kota per tanggal (Flint Hill vs Surabaya) ===")
cities = {}
for x in rep(["date", "city"], ["sessions"]):
    d = x["dimensionValues"][0]["value"]
    c = x["dimensionValues"][1]["value"]
    cities.setdefault(c, {})[d] = int(x["metricValues"][0]["value"])
for c in ("Flint Hill", "Prineville", "The Dalles", "Surabaya"):
    v = cities.get(c, {})
    hari = sorted(v.items())
    if hari:
        print(f"  {c:<14} {len(hari)} hari aktif | contoh: {hari[:5]}")

print("\n=== jam berapa 'Flint Hill' berkunjung (jam lokal properti) ===")
agg = {}
for x in rep(["hour", "city"], ["sessions"]):
    if x["dimensionValues"][1]["value"] == "Flint Hill":
        agg[x["dimensionValues"][0]["value"]] = int(x["metricValues"][0]["value"])
print("  ", dict(sorted(agg.items(), key=lambda t: t[0])))

print("\n=== event yang tercatat dari Flint Hill ===")
for x in rep(["city", "eventName"], ["eventCount"], limit=50):
    if x["dimensionValues"][0]["value"] == "Flint Hill":
        print(f"   {x['dimensionValues'][1]['value']:<26} {x['metricValues'][0]['value']}")

print("\n=== rata-rata halaman per sesi (indikasi bot) ===")
for x in rep(["city"], ["sessions", "screenPageViews", "averageSessionDuration"]):
    nama = x["dimensionValues"][0]["value"]
    if nama in ("Flint Hill", "Prineville", "The Dalles", "Surabaya", "Malang"):
        s = float(x["metricValues"][0]["value"]); pv = float(x["metricValues"][1]["value"]); dur = float(x["metricValues"][2]["value"])
        print(f"   {nama:<14} sesi {s:>4.0f} | pageview/sesi {pv/s if s else 0:.2f} | durasi {dur:.0f}s")
