"""
Command-line script to generate SonarQube trend reports for a specific project.
"""
import sys
import logging
import argparse
from pathlib import Path

# Add parent directory to path for imports
parent_dir = Path(__file__).parent.parent
sys.path.insert(0, str(parent_dir))

from src.config_manager import ConfigManager
from src.trend_report_generator import TrendReportGenerator

# Configure logging
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)


def main():
    """Main entry point for trend report generation."""
    parser = argparse.ArgumentParser(
        description="Generate SonarQube trend report for a specific project",
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog="""
Examples:
  python src/generate_trend_report.py my-project-key
  python src/generate_trend_report.py my-project-key --days 60
  python src/generate_trend_report.py my-project-key --output custom/reports
        """
    )
    
    parser.add_argument(
        "project_key",
        help="SonarQube project key"
    )
    
    parser.add_argument(
        "--days",
        type=int,
        default=30,
        help="Number of days of history to analyze (default: 30)"
    )
    
    parser.add_argument(
        "--output",
        type=str,
        default=None,
        help="Output directory for reports (default: reports/trends)"
    )
    
    args = parser.parse_args()
    
    try:
        # Load configuration
        logger.info("Loading configuration...")
        config = ConfigManager()
        
        # Get SonarQube credentials
        sonar_url = config.get("sonarqube.url")
        sonar_token = config.get("sonarqube.token")
        
        if not sonar_url or not sonar_token:
            logger.error("SonarQube URL and token are required. Please configure them in .env or config.yaml")
            sys.exit(1)
        
        # Determine output directory
        output_dir = args.output
        if output_dir is None:
            reports_dir = config.get("scanning.reports_dir", "./reports")
            output_dir = str(Path(reports_dir) / "trends")
        
        # Initialize trend report generator
        logger.info(f"Initializing trend report generator for project: {args.project_key}")
        generator = TrendReportGenerator(
            sonar_url=sonar_url,
            sonar_token=sonar_token,
            reports_dir=output_dir
        )
        
        # Generate report
        logger.info(f"Generating trend report for last {args.days} days...")
        report_path = generator.generate_report(
            project_key=args.project_key,
            days=args.days
        )
        
        if report_path:
            logger.info(f"Trend report generated successfully: {report_path}")
            print(f"\n[SUCCESS] Trend report generated: {report_path}")
            print(f"  Open the file in your web browser to view the report.")
            sys.exit(0)
        else:
            logger.error("Failed to generate trend report")
            print("\n[ERROR] Failed to generate trend report. Check logs for details.")
            sys.exit(1)
            
    except KeyboardInterrupt:
        logger.info("Interrupted by user")
        print("\n[INTERRUPTED] Operation cancelled by user.")
        sys.exit(1)
    except Exception as e:
        logger.error(f"Unexpected error: {e}", exc_info=True)
        print(f"\n[ERROR] {e}")
        sys.exit(1)


if __name__ == "__main__":
    main()
