import os
import sys
import pandas as pd
from apify_client import ApifyClient
from pathlib import Path

# Add core to path
sys.path.append(str(Path(__file__).parent.parent / "core"))
from blackboard import Blackboard

class ApifyEnrichmentSkill:
    def __init__(self, api_token=None):
        self.api_token = api_token or os.environ.get("APIFY_API_TOKEN")
        self.client = ApifyClient(self.api_token) if self.api_token else None
        self.bb = Blackboard()

    def enrich_csv(self, input_csv, output_csv, actor_id="apify/google-maps-scraper", limit=10):
        """
        Enriches a CSV file by running an Apify Actor on each record.
        """
        if not self.client:
            print("[APIFY] Error: No API Token provided.")
            return False
            
        print(f"[APIFY] Enriching {input_csv} using {actor_id}...")
        df = pd.read_csv(input_csv)
        
        # Take a subset if limit is set (for testing)
        leads = df.head(limit)
        
        # Determine Actor Run Configuration
        # For Google Maps Scraper, we usually pass 'searchQueries'
        queries = []
        for _, row in leads.iterrows():
            query = f"{row['Company']} {row['City']} {row['State']}"
            queries.append(query)
            
        run_input = {
            "searchStrings": queries,
            "maxResults": limit,
            "scrapeContactDetails": True,
            "scrapeContactInfo": True
        }
        
        # Run Actor
        print(f"[APIFY] Running actor {actor_id} with {len(queries)} queries...")
        run = self.client.actor(actor_id).call(run_input=run_input)
        
        # Fetch results
        results = []
        for item in self.client.dataset(run["defaultDatasetId"]).iterate_items():
            results.append(item)
            
        # Merge results back into original tracking or create new enriched file
        enriched_df = pd.DataFrame(results)
        enriched_df.to_csv(output_csv, index=False)
        
        print(f"[APIFY] Success! Enriched file saved to {output_csv}")
        return True

if __name__ == "__main__":
    # Test execution
    skill = ApifyEnrichmentSkill()
    # Placeholder for actual execution logic
    print("Apify Enrichment Skill initialized. Awaiting token and task.")
