"""
Genesis Domain Intelligence — Bulk Portfolio Audit
Audits all domains in the Genesis portfolio or a custom list.

Usage:
    python bulk_audit.py                     # Audit full Genesis portfolio
    python bulk_audit.py --file domains.txt  # Audit from file (one domain per line)
    python bulk_audit.py --domain example.com.au  # Single domain

Output:
    - Results saved to Elestio PostgreSQL
    - Summary report printed to console
    - JSON summary saved to E:\genesis-system\tools\domain_audit\results\bulk_summary.json
"""

import sys
import os
import json
import time
import argparse
from datetime import datetime

sys.path.append(os.path.dirname(os.path.abspath(__file__)))
from audit_domain import audit_domain, save_audit_to_db

# Complete Genesis domain portfolio (from DOMAIN_PORTFOLIO_AUDIT.md)
# Last verified: 2026-02-16
GENESIS_DOMAINS = [
    # --- GoDaddy (Sunaiva Brand) ---
    "sunaivadigital.com",
    "sunaiva.com",
    "sunaiva.com.au",
    "sunaivasites.com.au",
    "sunaivacore.com.au",
    "sunaivaflow.com.au",

    # --- VentraIP: Voice AI + Industry Bots ---
    "aivareceptionist.com.au",
    "aivoiceagent.com.au",
    "aivoicereceptionist.com.au",
    "tradievoiceagent.com.au",
    "tradiechatbots.com.au",
    "tradiesai.com.au",
    "buildervoiceai.com.au",
    "plumbervoiceai.com.au",
    "electricianvoiceai.com.au",
    "hvacvoiceai.com.au",
    "carpentervoiceai.com.au",
    "landscapervoiceai.com.au",
    "paintervoiceai.com.au",
    "roofervoiceai.com.au",

    # --- VentraIP: Receptionist Brand ---
    "receptionistai.com.au",
    "airecep.com.au",
    "aireceptionist.com.au",
    "virtualreceptionistai.com.au",
    "smartreceptionist.com.au",

    # --- VentraIP: Geo + Niche ---
    "brisbanechatbot.com.au",
    "sydneychatbot.com.au",
    "melbournechatbot.com.au",
    "perthchatbot.com.au",
    "adelaidechatbot.com.au",
    "cairnschatbot.com.au",
    "goldcoastchatbot.com.au",

    # --- VentraIP: Web Design ---
    "aiwebdesign.com.au",
    "instantwebsite.com.au",
    "netlifywebsites.com.au",
    "tradiewebsites.com.au",
    "businesswebsiteai.com.au",

    # --- VentraIP: Misc ---
    "agileadapt.com.au",
    "agileadaptai.com.au",
    "genesisai.com.au",
    "aivaqueen.com.au",
    "aiautomation.com.au",
    "automatedbusiness.com.au",
    "businessautomationai.com.au",
    "leadgenai.com.au",
    "callcaptureai.com.au",
    "missedcallai.com.au",

    # --- Unknown Registrar ---
    "agileadapt.com",
    "sunaiva.ai",
    "receptionistai.com",
]


def bulk_audit(domains: list, delay_seconds: float = 0.5) -> list:
    """
    Audit all domains with rate limiting.
    Returns list of audit results.
    """
    results = []
    start_time = datetime.utcnow()

    print(f"\n{'='*60}")
    print(f"GENESIS DOMAIN INTELLIGENCE — BULK AUDIT")
    print(f"Domains: {len(domains)} | Started: {start_time.strftime('%H:%M:%S')}")
    print(f"{'='*60}\n")

    for i, domain in enumerate(domains, 1):
        print(f"[{i:03d}/{len(domains)}] ", end="")
        try:
            result = audit_domain(domain)
            save_audit_to_db(result)
            results.append(result)
        except Exception as e:
            print(f"ERROR on {domain}: {e}")
            results.append({
                "domain": domain,
                "error": str(e),
                "audit_date": datetime.utcnow().isoformat()
            })

        if i < len(domains):
            time.sleep(delay_seconds)

    end_time = datetime.utcnow()
    elapsed = (end_time - start_time).total_seconds()

    # Print summary
    successful = [r for r in results if "audit_score" in r]
    failed = [r for r in results if "error" in r]
    critical_domains = [r for r in successful if r.get("critical_issues", 0) > 0]
    total_revenue_at_risk = sum(r.get("total_revenue_at_risk", 0) for r in successful)

    print(f"\n{'='*60}")
    print(f"AUDIT COMPLETE")
    print(f"{'='*60}")
    print(f"Total domains audited: {len(domains)}")
    print(f"Successful: {len(successful)}")
    print(f"Failed/errors: {len(failed)}")
    print(f"Domains with critical issues: {len(critical_domains)}")
    print(f"Total revenue at risk (portfolio): ${total_revenue_at_risk:,}/month")
    print(f"Time elapsed: {elapsed:.1f}s")
    print(f"{'='*60}\n")

    # Top opportunities
    if successful:
        sorted_by_risk = sorted(successful, key=lambda x: x.get("total_revenue_at_risk", 0), reverse=True)
        print("TOP 10 DOMAINS BY REVENUE OPPORTUNITY:")
        for r in sorted_by_risk[:10]:
            print(f"  {r['domain']:<40} Score: {r['audit_score']:3}/100 | "
                  f"At risk: ${r.get('total_revenue_at_risk', 0):,}/mo")

    return results


def save_summary(results: list):
    """Save bulk audit summary to JSON."""
    output_dir = "E:/genesis-system/tools/domain_audit/results"
    os.makedirs(output_dir, exist_ok=True)

    summary = {
        "audit_date": datetime.utcnow().isoformat(),
        "total_domains": len(results),
        "successful": len([r for r in results if "audit_score" in r]),
        "failed": len([r for r in results if "error" in r]),
        "results": results
    }

    output_path = f"{output_dir}/bulk_summary_{datetime.utcnow().strftime('%Y%m%d_%H%M%S')}.json"
    with open(output_path, "w") as f:
        json.dump(summary, f, indent=2)

    print(f"Summary saved to: {output_path}")
    return output_path


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Genesis Domain Bulk Audit")
    parser.add_argument("--file", help="Path to text file with one domain per line")
    parser.add_argument("--domain", help="Audit a single domain")
    parser.add_argument("--delay", type=float, default=0.5, help="Delay between requests (seconds)")
    args = parser.parse_args()

    if args.domain:
        domains = [args.domain]
    elif args.file:
        with open(args.file) as f:
            domains = [line.strip() for line in f if line.strip() and not line.startswith("#")]
    else:
        domains = GENESIS_DOMAINS

    results = bulk_audit(domains, delay_seconds=args.delay)
    save_summary(results)
