"""
Export and reporting CLI commands.
"""

import sys
from typing import Optional

from tddai import TddaiError
from services import ExportService
from cli.presenters import OutputFormatter


class ExportCommands:
    """Commands for data export and reporting."""

    def __init__(self):
        self.service = ExportService()

    def issue_index(self, format_type: str = "tsv", sort_by: str = "number",
                   filter_state: Optional[str] = None, filter_priority: Optional[str] = None,
                   include_state: bool = False) -> None:
        """Output compact index of all issues for Unix processing.

        Args:
            format_type: Output format (tsv, csv, json, fields)
            sort_by: Sort by field (number, title, priority, state, created, updated)
            filter_state: Filter by state (open, closed)
            filter_priority: Filter by priority (low, medium, high, critical, none)
            include_state: Include state column in output
        """
        try:
            output = self.service.export_issues(
                format_type=format_type,
                sort_by=sort_by,
                filter_state=filter_state,
                filter_priority=filter_priority,
                include_state=include_state
            )

            # Output directly to stdout for piping
            print(output)

        except TddaiError as e:
            # Send error to stderr to avoid corrupting piped output
            print(f"❌ Error: {e}", file=sys.stderr)
            sys.exit(1)

    def export_issues_csv(self, output_file: str = None) -> None:
        """Export issues in CSV format."""
        try:
            output = self.service.export_issues(
                format_type="csv",
                sort_by="number"
            )

            if output_file:
                with open(output_file, 'w') as f:
                    f.write(output)
                OutputFormatter.success(f"Issues exported to {output_file}")
            else:
                print(output)

        except TddaiError as e:
            OutputFormatter.exit_with_error(str(e))

    def export_issues_json(self, output_file: str = None) -> None:
        """Export issues in JSON format."""
        try:
            output = self.service.export_issues(
                format_type="json",
                sort_by="number"
            )

            if output_file:
                with open(output_file, 'w') as f:
                    f.write(output)
                OutputFormatter.success(f"Issues exported to {output_file}")
            else:
                print(output)

        except TddaiError as e:
            OutputFormatter.exit_with_error(str(e))