#!/usr/bin/env python3

import click
import os
import sys
from typing import Optional
from .content_evaluator import ContentEvaluator
from .report_generator import ReportGenerator

@click.command()
@click.option('--images-dir', '-d', required=True,
              help='Directory containing images to evaluate')
@click.option('--guidelines', '-g', default='config/suno_guidelines.txt',
              help='Path to guidelines text file (default: config/suno_guidelines.txt)')
@click.option('--output', '-o', default=None,
              help='Output file path for JSON report (default: auto-generated)')
@click.option('--detailed', is_flag=True, default=False,
              help='Generate detailed report with full analysis data')
@click.option('--single-image', '-s', default=None,
              help='Evaluate a single image instead of a directory')
def main(images_dir: Optional[str], guidelines: str, output: Optional[str],
         detailed: bool, single_image: Optional[str]):
    """
    Suno Content Evaluation Tool

    Analyzes images against brand guidelines using computer vision and NLP.
    Extracts text from images and evaluates compliance with brand voice and messaging.
    """

    print("🎵 Suno Content Evaluation Tool")
    print("=" * 40)

    # Validate guidelines file
    print(f"🔍 Checking guidelines file: {guidelines}")
    if not os.path.exists(guidelines):
        print(f"❌ Guidelines file not found: {guidelines}")
        sys.exit(1)
    print("   ✅ Guidelines file found")

    # Initialize evaluator
    try:
        print("\n🚀 Initializing evaluation system...")
        evaluator = ContentEvaluator(guidelines)
        report_generator = ReportGenerator()
        print(f"\n✅ System ready! Guidelines loaded from: {guidelines}")
    except Exception as e:
        print(f"❌ Failed to initialize evaluator: {e}")
        sys.exit(1)

    # Evaluate content
    try:
        if single_image:
            # Single image evaluation
            print(f"\n🎯 Single Image Mode")
            if not os.path.exists(single_image):
                print(f"❌ Image file not found: {single_image}")
                sys.exit(1)

            print(f"📸 Evaluating: {single_image}")
            result = evaluator.evaluate_image(single_image)
            results = [result]

        else:
            # Directory evaluation
            print(f"\n🎯 Directory Mode")
            if not os.path.exists(images_dir):
                print(f"❌ Images directory not found: {images_dir}")
                sys.exit(1)

            print(f"📁 Scanning directory: {images_dir}")
            results = evaluator.evaluate_directory(images_dir)

        if not results or (len(results) == 1 and "error" in results[0]):
            error_msg = results[0].get("error", "Unknown error") if results else "No results"
            print(f"❌ Evaluation failed: {error_msg}")
            sys.exit(1)

    except Exception as e:
        print(f"❌ Evaluation failed: {e}")
        sys.exit(1)

    # Generate summary
    print("\n📊 Generating summary...")
    summary = evaluator.generate_summary(results)

    # Display quick summary
    print("\n" + "="*50)
    print("📊 EVALUATION SUMMARY")
    print("="*50)
    print(f"📈 Total images: {summary['total_images']}")
    print(f"✅ Approved: {summary['approved']}")
    print(f"❌ Rejected: {summary['rejected']}")
    print(f"📊 Approval rate: {summary['approval_rate']:.1%}")

    if summary.get('rejection_categories'):
        print(f"\n🔍 Top rejection reasons:")
        for reason, count in list(summary['rejection_categories'].items())[:3]:
            print(f"   • {reason}: {count}")

    # Generate and save report
    try:
        print(f"\n💾 Generating {'detailed' if detailed else 'standard'} report...")
        if detailed:
            report_json = report_generator.generate_detailed_report(results, summary)
        else:
            report_json = report_generator.generate_json_report(results, summary)

        output_path = report_generator.save_report(report_json, output)
        print(f"📄 Report saved to: {output_path}")

    except Exception as e:
        print(f"❌ Failed to save report: {e}")
        sys.exit(1)

    # Show final status
    approved_count = sum(1 for r in results if r.get('approved', False))
    print("\n" + "="*50)
    if approved_count == len(results):
        print("🎉 ALL CONTENT APPROVED!")
    elif approved_count == 0:
        print("⚠️  NO CONTENT APPROVED - Review guidelines compliance")
    else:
        print(f"⚡ MIXED RESULTS: {approved_count}/{len(results)} content pieces approved")
    print("="*50)

    print(f"\n✅ Evaluation complete! Check {output_path} for full results.")

if __name__ == "__main__":
    main()