import pandas as pd
import requests
import spacy
import time

# -----------------------------
# CONFIGURATION
# -----------------------------
API_KEY = "3261d237e7mshdfafece4d7c2b19p1b1841jsn13453ad24a0c"
API_HOST = "seo-keyword-research-api.p.rapidapi.com"
ENDPOINT = "https://seo-keyword-research-api.p.rapidapi.com/keyword-research"

HEADERS = {
    "x-rapidapi-key": API_KEY,
    "x-rapidapi-host": API_HOST
}

INPUT_FILE = "flow_comments/drone_use_high_upfront_cost_spray_drone.csv"
JTBD_COLUMN = "struggle"
OUTPUT_FILE = "jtbd_scored_keywords.csv"
WAIT_TIME = 1  # seconds between requests

COUNTRY_CODE = "us"

# -----------------------------
# LOAD NLP MODEL
# -----------------------------
nlp = spacy.load("en_core_web_sm")

def extract_noun_phrases(text, max_phrases=3):
    doc = nlp(text)
    phrases = [chunk.text.strip().lower() for chunk in doc.noun_chunks]
    clean_phrases = [p for p in phrases if len(p.split()) > 1 and len(p) > 4]
    return clean_phrases[:max_phrases]

# -----------------------------
# QUERY API
# -----------------------------
def query_keyword(keyword):
    url = f"{ENDPOINT}?keyword={keyword}&country={COUNTRY_CODE}"

    try:
        response = requests.get(url, headers=HEADERS)
        data = response.json()
        if "result" in data:
            return [
                {
                    "jtbd": keyword,
                    "keyword": item.get("keyword", ""),
                    "volume": item.get("avg_monthly_searches", 0),
                    "competition": item.get("competition_value", ""),
                    "high_cpc": item.get("High CPC", ""),
                    "low_cpc": item.get("Low CPC", "")
                }
                for item in data["result"]
            ]
        else:
            print(f"⚠️ No results for: {keyword}")
            return []
    except Exception as e:
        print(f"❌ Error for {keyword}: {e}")
        return []

# -----------------------------
# MAIN SCRIPT
# -----------------------------
def main():
    df = pd.read_csv(INPUT_FILE)
    jtbd_phrases = df[JTBD_COLUMN].dropna().unique().tolist()

    from pdb import set_trace; set_trace()

    all_keywords = set()
    for phrase in jtbd_phrases:
        all_keywords.update(extract_noun_phrases(phrase))

    print(f"🔍 Extracted {len(all_keywords)} phrases to query")

    results = []
    for i, phrase in enumerate(all_keywords):
        print(f"{i+1}/{len(all_keywords)} → {phrase}")
        result_data = query_keyword(phrase)
        results.extend(result_data)
        time.sleep(WAIT_TIME)

    pd.DataFrame(results).to_csv(OUTPUT_FILE, index=False)
    print(f"✅ Done! Scored {len(results)} keywords. Saved to: {OUTPUT_FILE}")

if __name__ == "__main__":
    main()
