import time
from dataclasses import dataclass, field
from enum import Enum


class ApprovalStatus(Enum):
    PENDING = "pending"
    APPROVED = "approved"
    REJECTED = "rejected"
    TIMEOUT = "timeout"


@dataclass
class ApprovalRequest:
    """An approval request from Antigravity."""
    request_id: str
    conversation_id: str
    command: str           # The command/action needing approval
    description: str       # Human-readable description
    timestamp: float
    status: str = "pending"
    discord_message_id: int = 0
    project_name: str = ""  # Project routing key
    step_type: str = ""  # e.g. 'diff_review', passed through to response
    safe_to_auto_run: bool = False  # Allows bot to silently auto-approve


@dataclass
class UserResponse:
    """A user response from Discord."""
    request_id: str
    approved: bool
    user_input: str = ""
    timestamp: float = field(default_factory=time.time)
    button_index: int = -1  # -1 = legacy (approve/reject), 0+ = specific button index
    step_type: str = ""  # pass through from pending for extension routing
    project_name: str = ""  # for multi-project: extension uses this when pending file is missing


class EventType(Enum):
    """Types of brain events."""
    SESSION_START = "session_start"      # New conversation directory created
    FILE_CHANGED = "file_changed"        # Watched file modified
    FILE_CREATED = "file_created"        # Watched file first created


@dataclass
class BrainEvent:
    """An event from the brain directory."""
    event_type: EventType
    conversation_id: str
    file_name: str = ""
    file_path: str = None
    content: str = ""
    timestamp: float = field(default_factory=time.time)
