// src/modes/highlight/highlight.rs
// (This file is intentionally simple for now, reusing ReadOnly logic)

use crate::config::binds::config::Config;
use crate::config::binds::key_sequences::KeySequenceTracker;
use crate::services::grpc_client::GrpcClient;
use crate::state::app::state::AppState;
use crate::state::pages::auth::{LoginState, RegisterState};
use crate::state::pages::admin::AdminState;
use crate::state::pages::form::FormState;
use crate::modes::handlers::event::EventOutcome;
use crate::modes::read_only;
use crossterm::event::KeyEvent;
use anyhow::Result;

/// Handles events when in Highlight mode.
/// Currently, it mostly delegates to the read_only handler for movement.
/// Exiting highlight mode is handled directly in the main event handler.
pub async fn handle_highlight_event(
    app_state: &mut AppState,
    key: KeyEvent,
    config: &Config,
    form_state: &mut FormState,
    login_state: &mut LoginState,
    register_state: &mut RegisterState,
    admin_state: &mut AdminState,
    key_sequence_tracker: &mut KeySequenceTracker,
    current_position: &mut u64,
    total_count: u64,
    grpc_client: &mut GrpcClient,
    command_message: &mut String,
    edit_mode_cooldown: &mut bool,
    ideal_cursor_column: &mut usize,
) -> Result<EventOutcome> {
    // Delegate movement and other actions to the read_only handler
    // The rendering logic will use the highlight_anchor to draw the selection
    let (should_exit, message) = read_only::handle_read_only_event(
        app_state,
        key,
        config,
        form_state,
        login_state,
        register_state,
        &mut admin_state.add_table_state,
        &mut admin_state.add_logic_state,
        key_sequence_tracker,
        grpc_client,
        command_message, // Pass the message buffer
        edit_mode_cooldown,
        ideal_cursor_column,
    )
    .await?;

    // ReadOnly handler doesn't return EventOutcome directly, adapt if needed
    // For now, assume Ok outcome unless ReadOnly signals an exit (which we ignore here)
    if should_exit {
        // This exit is likely for the whole app, let the main loop handle it
        // We just return the message from read_only
        Ok(EventOutcome::Ok(message))
    } else {
        Ok(EventOutcome::Ok(message))
    }
}


