"""
Project management screen for MiniMax TUI.

This module provides the Textual-based project management interface,
allowing users to manage AI projects, view project history, and
organize their work within the MiniMax client.
"""

from textual.app import ComposeResult
from textual.containers import Container, Horizontal, Vertical
from textual.screen import Screen
from textual.widgets import Button, DataTable, Footer, Header, Label, Static

from minimax_client.commands.project import ProjectCommand
from minimax_client.config import Config


class ProjectScreen(Screen):
    """Screen for project management operations."""
    
    BINDINGS = [
        ("n", "new_project", "New Project"),
        ("o", "open_project", "Open Project"),
        ("d", "delete_project", "Delete Project"),
        ("r", "refresh", "Refresh"),
        ("escape", "app.pop_screen", "Back"),
    ]
    
    def __init__(self, config: Config = None):
        """Initialize the project screen.
        
        Args:
            config: MiniMax configuration object
        """
        super().__init__()
        self.config = config or Config()
        self.project_command = ProjectCommand(self.config)
        
    def compose(self) -> ComposeResult:
        """Compose the project screen layout."""
        yield Header()
        
        with Container(id="project-container"):
            yield Label("📁 Project Management", id="title")
            
            with Horizontal(id="button-bar"):
                yield Button("New Project", id="new-btn", variant="primary")
                yield Button("Open Project", id="open-btn", variant="default")
                yield Button("Delete Project", id="delete-btn", variant="warning")
                yield Button("Refresh", id="refresh-btn", variant="default")
            
            # Project list table
            yield DataTable(id="project-table")
            
            # Project details panel
            with Vertical(id="details-panel"):
                yield Label("Project Details", id="details-title")
                yield Static("Select a project to view details", id="details-content")
        
        yield Footer()
    
    def on_mount(self) -> None:
        """Initialize the screen when mounted."""
        # Set up the project table
        table = self.query_one("#project-table", DataTable)
        table.add_columns("Name", "Type", "Created", "Modified", "Status")
        table.cursor_type = "row"
        
        # Load projects
        self.refresh_projects()
    
    def refresh_projects(self) -> None:
        """Refresh the project list."""
        table = self.query_one("#project-table", DataTable)
        table.clear()
        
        # TODO: Implement actual project loading from ProjectCommand
        # For now, show placeholder data
        sample_projects = [
            ("My AI Assistant", "Chat", "2024-01-15", "2024-01-20", "Active"),
            ("Code Generator", "Generate", "2024-01-10", "2024-01-18", "Active"),
            ("Document Analyzer", "Analyze", "2024-01-05", "2024-01-12", "Archived"),
        ]
        
        for project in sample_projects:
            table.add_row(*project)
    
    def on_button_pressed(self, event: Button.Pressed) -> None:
        """Handle button press events."""
        button_id = event.button.id
        
        if button_id == "new-btn":
            self.action_new_project()
        elif button_id == "open-btn":
            self.action_open_project()
        elif button_id == "delete-btn":
            self.action_delete_project()
        elif button_id == "refresh-btn":
            self.action_refresh()
    
    def on_data_table_row_selected(self, event: DataTable.RowSelected) -> None:
        """Handle project selection."""
        # Update details panel with selected project info
        details = self.query_one("#details-content", Static)
        
        # Get selected row data
        table = self.query_one("#project-table", DataTable)
        row_key = event.row_key
        
        if row_key is not None:
            # TODO: Fetch actual project details
            details.update(f"Selected project: Row {row_key}")
    
    def action_new_project(self) -> None:
        """Create a new project."""
        # TODO: Implement project creation dialog
        self.notify("New project creation - Coming soon!", severity="information")
    
    def action_open_project(self) -> None:
        """Open selected project."""
        table = self.query_one("#project-table", DataTable)
        
        if table.cursor_row is not None:
            # TODO: Implement project opening logic
            self.notify(f"Opening project at row {table.cursor_row}", severity="information")
    
    def action_delete_project(self) -> None:
        """Delete selected project."""
        table = self.query_one("#project-table", DataTable)
        
        if table.cursor_row is not None:
            # TODO: Implement confirmation dialog and deletion
            self.notify("Delete functionality - Coming soon!", severity="warning")
    
    def action_refresh(self) -> None:
        """Refresh the project list."""
        self.refresh_projects()
        self.notify("Project list refreshed", severity="information")


# CSS styling for the project screen
ProjectScreen.CSS = """
#project-container {
    padding: 1 2;
}

#title {
    text-style: bold;
    color: $primary;
    margin-bottom: 1;
}

#button-bar {
    margin-bottom: 1;
    height: 3;
}

#button-bar Button {
    margin-right: 1;
}

#project-table {
    height: 60%;
    margin-bottom: 1;
}

#details-panel {
    border: solid $primary;
    padding: 1;
    height: 30%;
}

#details-title {
    text-style: bold;
    margin-bottom: 1;
}
"""