#!/usr/bin/env python3
"""
Argument Parser - CLI Argument Configuration

SINGLE RESPONSIBILITY: Configure command-line argument parsing
"""

from __future__ import annotations

import argparse


def create_argument_parser() -> argparse.ArgumentParser:
    """
    Create and configure the argument parser for transcript-fixer CLI.

    Returns:
        Configured ArgumentParser instance
    """
    parser = argparse.ArgumentParser(
        description="Transcript Fixer - Iterative correction tool",
        formatter_class=argparse.RawDescriptionHelpFormatter
    )

    # Setup commands
    parser.add_argument(
        "--init",
        action="store_true",
        help="Initialize ~/.transcript-fixer/"
    )

    # Correction management
    parser.add_argument(
        "--add",
        nargs=2,
        metavar=("FROM", "TO"),
        dest="add_correction",
        help="Add correction"
    )
    parser.add_argument(
        "--force",
        action="store_true",
        default=False,
        help="Force --add even when safety checks detect risks (common word, substring collision)"
    )
    parser.add_argument(
        "--list",
        action="store_true",
        dest="list_corrections",
        help="List all corrections"
    )
    parser.add_argument(
        "--audit",
        action="store_true",
        dest="audit_dictionary",
        help="Audit all active corrections for false positive risks (common words, short text, substring collisions)"
    )

    # Correction workflow
    parser.add_argument(
        "--input", "-i",
        help="Input file"
    )
    parser.add_argument(
        "--output", "-o",
        help="Output directory"
    )
    parser.add_argument(
        "--stage", "-s",
        type=int,
        choices=[1, 2, 3],
        default=3,
        help="Run stage (1=dict, 2=AI, 3=full)"
    )
    parser.add_argument(
        "--domain", "-d",
        default=None,
        help="Correction domain (default: all domains)"
    )

    # Learning commands
    parser.add_argument(
        "--review-learned",
        action="store_true",
        help="Review learned suggestions"
    )
    parser.add_argument(
        "--approve",
        nargs=2,
        metavar=("FROM", "TO"),
        help="Approve suggestion"
    )

    # Utility commands
    parser.add_argument(
        "--validate",
        action="store_true",
        help="Validate configuration and JSON files"
    )
    parser.add_argument(
        "--health",
        action="store_true",
        help="Perform system health check (P1-4 fix)"
    )
    parser.add_argument(
        "--health-level",
        dest="health_level",
        choices=["basic", "standard", "deep"],
        default="standard",
        help="Health check thoroughness (default: standard)"
    )
    parser.add_argument(
        "--health-format",
        dest="health_format",
        choices=["text", "json"],
        default="text",
        help="Health check output format (default: text)"
    )
    parser.add_argument(
        "--verbose", "-v",
        action="store_true",
        help="Show verbose output (for health check)"
    )
    parser.add_argument(
        "--metrics",
        action="store_true",
        help="Display collected metrics (P1-7 fix)"
    )
    parser.add_argument(
        "--metrics-format",
        dest="metrics_format",
        choices=["text", "json", "prometheus"],
        default="text",
        help="Metrics output format (default: text)"
    )

    # Configuration management (P1-5 fix)
    parser.add_argument(
        "--config",
        dest="config_action",
        choices=["show", "create-example", "validate", "set-env"],
        help="Configuration management (P1-5 fix)"
    )
    parser.add_argument(
        "--config-path",
        dest="config_path",
        help="Path for config file operations"
    )
    parser.add_argument(
        "--env",
        dest="config_env",
        choices=["development", "staging", "production", "test"],
        help="Set environment (with --config set-env)"
    )

    # Database migration commands (P1-6 fix)
    parser.add_argument(
        "--migration",
        dest="migration_action",
        choices=["status", "history", "migrate", "rollback", "plan", "validate", "create"],
        help="Database migration commands (P1-6 fix)"
    )
    parser.add_argument(
        "--migration-version",
        dest="migration_version",
        help="Target migration version (for migrate/rollback commands)"
    )
    parser.add_argument(
        "--migration-dry-run",
        dest="migration_dry_run",
        action="store_true",
        help="Dry run mode for migrations (no changes applied)"
    )
    parser.add_argument(
        "--migration-force",
        dest="migration_force",
        action="store_true",
        help="Force migration (bypass safety checks)"
    )
    parser.add_argument(
        "--migration-yes",
        dest="migration_yes",
        action="store_true",
        help="Skip confirmation prompts"
    )
    parser.add_argument(
        "--migration-history-format",
        dest="migration_history_format",
        choices=["text", "json"],
        default="text",
        help="Migration history output format (default: text)"
    )
    parser.add_argument(
        "--migration-name",
        dest="migration_name",
        help="Migration name (for create command)"
    )
    parser.add_argument(
        "--migration-description",
        dest="migration_description",
        help="Migration description (for create command)"
    )

    # Audit log retention commands (P1-11 fix)
    parser.add_argument(
        "--audit-retention",
        dest="audit_retention_action",
        choices=["cleanup", "report", "policies", "restore"],
        help="Audit log retention commands (P1-11 fix)"
    )
    parser.add_argument(
        "--entity-type",
        dest="entity_type",
        help="Entity type to operate on (for cleanup command)"
    )
    parser.add_argument(
        "--dry-run",
        dest="dry_run",
        action="store_true",
        help="Dry run mode (no actual changes)"
    )
    parser.add_argument(
        "--archive-file",
        dest="archive_file",
        help="Archive file path (for restore command)"
    )
    parser.add_argument(
        "--verify-only",
        dest="verify_only",
        action="store_true",
        help="Verify archive integrity without restoring (for restore command)"
    )

    return parser
