#!/usr/bin/env python3
"""
Import Hunter.io enriched contacts into Close.com CRM
"""

import requests
import csv
import time
import json

# Close.com API credentials
CLOSE_API_KEY = "api_0xQHQP1ZUWt4PC1JDfOMCH.4sWuBvlVcrHX0mLG1nRgne"
BASE_URL = "https://api.close.com/api/v1"

def create_lead(company_name, company_domain):
    """Create or find a lead (company) in Close.com"""
    
    # First, search if lead already exists
    search_url = f"{BASE_URL}/lead/"
    params = {"query": f'company:"{company_name}"'}
    
    response = requests.get(
        search_url,
        params=params,
        auth=(CLOSE_API_KEY, '')
    )
    
    if response.status_code == 200:
        data = response.json()
        if data.get('data') and len(data['data']) > 0:
            # Lead exists, return ID
            lead_id = data['data'][0]['id']
            print(f"  ✓ Found existing lead: {company_name}")
            return lead_id
    
    # Create new lead
    lead_data = {
        "name": company_name,
        "url": f"https://{company_domain}" if company_domain else None
    }
    
    response = requests.post(
        f"{BASE_URL}/lead/",
        json=lead_data,
        auth=(CLOSE_API_KEY, '')
    )
    
    if response.status_code == 200:
        lead_id = response.json()['id']
        print(f"  ✓ Created new lead: {company_name}")
        return lead_id
    else:
        print(f"  ✗ Error creating lead {company_name}: {response.text}")
        return None

def add_contact(lead_id, contact_data):
    """Add a contact to a lead"""
    
    contact_payload = {
        "lead_id": lead_id,
        "name": contact_data['name'],
        "title": contact_data['position'],
        "emails": [{"email": contact_data['email'], "type": "office"}] if contact_data['email'] else [],
        "urls": [{"url": contact_data['linkedin'], "type": "linkedin"}] if contact_data['linkedin'] else []
    }
    
    response = requests.post(
        f"{BASE_URL}/contact/",
        json=contact_payload,
        auth=(CLOSE_API_KEY, '')
    )
    
    if response.status_code == 200:
        print(f"    ✓ Added: {contact_data['name']} ({contact_data['position']})")
        return True
    else:
        print(f"    ✗ Error adding {contact_data['name']}: {response.text}")
        return False

def main():
    """Main import workflow"""
    
    print("🚀 Importing Hunter.io contacts to Close.com CRM\n")
    
    # Read enriched contacts CSV
    contacts_by_company = {}
    
    with open('enriched-contacts.csv', 'r') as f:
        reader = csv.DictReader(f)
        for row in reader:
            company = row['Company']
            if company not in contacts_by_company:
                contacts_by_company[company] = {
                    'domain': row['Domain'],
                    'email_pattern': row['Email Pattern'],
                    'contacts': []
                }
            
            contacts_by_company[company]['contacts'].append({
                'name': row['Name'],
                'position': row['Position'],
                'email': row['Email'],
                'confidence': row['Confidence'],
                'linkedin': row['LinkedIn'] if row['LinkedIn'] != 'None' else None
            })
    
    print(f"📊 Found {len(contacts_by_company)} companies with {sum(len(c['contacts']) for c in contacts_by_company.values())} total contacts\n")
    
    # Import each company as a Lead with its contacts
    imported_leads = 0
    imported_contacts = 0
    
    for company_name, company_data in contacts_by_company.items():
        print(f"[{imported_leads + 1}/{len(contacts_by_company)}] {company_name}")
        
        # Create/find lead
        lead_id = create_lead(company_name, company_data['domain'])
        
        if lead_id:
            imported_leads += 1
            
            # Add all contacts for this company
            for contact in company_data['contacts']:
                if add_contact(lead_id, contact):
                    imported_contacts += 1
                
                # Rate limit (Close.com free tier: ~100 requests/min)
                time.sleep(0.6)
        
        print()
    
    print(f"\n✅ Import Complete!")
    print(f"📈 Summary:")
    print(f"  • Leads (Companies): {imported_leads}")
    print(f"  • Contacts (People): {imported_contacts}")
    print(f"\n🔗 View in Close.com: https://app.close.com/leads/")

if __name__ == '__main__':
    main()
