import os

import pandas as pd
from dotenv import load_dotenv
from google.ads.googleads.client import GoogleAdsClient
from google.ads.googleads.errors import GoogleAdsException

load_dotenv()

# -----------------------------
# Google Ads credentials -- see .env.example
# -----------------------------
client_id = os.environ["GOOGLE_ADS_CLIENT_ID"]
client_secret = os.environ["GOOGLE_ADS_CLIENT_SECRET"]
refresh_token = os.environ["GOOGLE_ADS_REFRESH_TOKEN"]
developer_token = os.environ["GOOGLE_ADS_DEVELOPER_TOKEN"]
customer_id = os.environ["GOOGLE_ADS_CUSTOMER_ID"]  # No dashes

# -----------------------------
# Load your JTBD phrases 
# -----------------------------
df = pd.read_csv("flow_comments/drone_use_high_upfront_cost_crop_yield.csv")  # Replace with your filename
# You can change this to 'struggle', 'outcome', etc.
phrases = df["struggle"].dropna().unique().tolist()

# -----------------------------
# Google Ads API Configuration
# -----------------------------
from google.ads.googleads.config import load_from_dict

config = {
    "developer_token": developer_token,
    "client_id": client_id,
    "client_secret": client_secret,
    "refresh_token": refresh_token,
    "login_customer_id": customer_id,
    "use_proto_plus": True,
}

client = GoogleAdsClient.load_from_dict(config)

# -----------------------------
# Generate keyword metrics
# -----------------------------
def get_keyword_metrics(keyword_text):
    try:
        keyword_plan_idea_service = client.get_service("KeywordPlanIdeaService")

        keyword_seed = client.get_type("KeywordSeed")
        keyword_seed.keywords.append(keyword_text)

        request = client.get_type("GenerateKeywordIdeasRequest")
        request.customer_id = customer_id
        request.keyword_seed = keyword_seed
        request.geo_target_constants.append("geoTargetConstants/2840")  # United States
        request.language = "languageConstants/1000"  # English

        response = keyword_plan_idea_service.generate_keyword_ideas(request=request)

        results = []
        for idea in response:
            results.append({
                "input": keyword_text,
                "keyword": idea.text,
                "volume": idea.keyword_idea_metrics.avg_monthly_searches,
                "competition": idea.keyword_idea_metrics.competition.name,
                "cpc_low": idea.keyword_idea_metrics.low_top_of_page_bid_micros / 1e6,
                "cpc_high": idea.keyword_idea_metrics.high_top_of_page_bid_micros / 1e6,
            })
        return results

    except GoogleAdsException as ex:
        print(f"API error for keyword: {keyword_text}")
        return []

# -----------------------------
# Run queries for all JTBDs
# -----------------------------
all_results = []
for phrase in phrases:
    keyword_results = get_keyword_metrics(phrase)
    all_results.extend(keyword_results)

# -----------------------------
# Save results
# -----------------------------
results_df = pd.DataFrame(all_results)
results_df.to_csv("jtbd_keyword_scores.csv", index=False)
print("✅ Keyword scoring complete. Output saved to jtbd_keyword_scores.csv")


