use crate::git::StatusSummary;
use crate::config::ThemeConfig;
use std::collections::HashMap;
use super::types::*;
#[derive(Debug, Clone)]
pub struct AppState {
pub running: bool, pub theme: ThemeConfig, pub last_status: String, pub status_summary: StatusSummary,
pub status_lines: Vec<String>,
pub status_entries: Vec<crate::git::parsers::status::StatusEntry>,
pub status_selected: usize,
pub status_selected_path: String,
pub last_diff_path: String,
pub last_diff: String,
pub last_diff_truncated: bool,
pub last_diff_total: usize,
pub last_diff_fetched_at: Option<String>,
pub diff_mode: DiffMode,
pub diff_parsed: crate::git::DiffParseResult,
pub show_help: bool,
pub repo_path: String,
pub last_status_error: Option<String>,
pub error_guidance: Option<crate::app::error_guidance::ErrorGuidance>,
pub focus: FocusPane,
pub key_help: Vec<KeyHelp>,
pub last_refreshed: Option<String>,
pub refreshing: bool,
pub last_refresh_time: Option<std::time::Instant>,
pub help_selected: usize, pub detail_scroll: usize, pub detail_scroll_x: usize, pub current_branch: String, pub selected_files: std::collections::HashSet<String>,
pub branches: Vec<BranchEntry>,
pub branch_selected: usize,
pub commits: Vec<CommitEntry>,
pub commit_selected: usize,
pub commit_input: String,
pub commit_mode: bool, pub amend_mode: bool, pub amend_author_name: String,
pub amend_author_email: String,
pub last_commit_info: Option<LastCommitInfo>,
pub amend_editing_field: Option<AmendField>, pub commit_template: Option<String>, pub feedback_message: Option<String>,
pub status_filter: String,
pub filter_mode: bool,
pub file_scrolls: HashMap<String, (usize, usize)>, pub stashes: Vec<StashEntry>,
pub stash_selected: usize,
pub branch_create_mode: bool,
pub branch_name_input: String,
pub stash_create_mode: bool,
pub stash_message_input: String,
pub hunks: Vec<(usize, usize)>,
pub hunk_selected: usize,
pub word_diff: bool,
pub selected_lines: std::collections::HashSet<usize>,
pub line_select_mode: bool,
pub tags: Vec<TagEntry>,
pub tag_selected: usize,
pub has_delta: bool,
pub use_delta: bool,
pub diff_context: usize,
pub ignore_whitespace: bool,
pub side_by_side: bool,
pub tree_view: bool,
pub reflog_entries: Vec<ReflogEntry>,
pub reflog_selected: usize,
pub commit_detail: Option<String>,
pub file_history_path: Option<String>,
#[allow(dead_code)]
pub log_filter: String,
#[allow(dead_code)]
pub log_filter_mode: bool,
pub log_graph: bool,
pub log_graph_text: String,
pub log_action_menu: bool,
pub log_action_selected: usize,
pub log_action_commit_hash: Option<String>,
pub confirm_action: Option<crate::app::actions::Action>,
pub confirm_message: Option<String>,
#[allow(dead_code)]
pub remotes: Vec<RemoteEntry>,
#[allow(dead_code)]
pub remote_selected: usize,
pub command_palette: bool,
pub palette_input: String,
pub palette_selected: usize,
pub log_selected_hashes: std::collections::HashSet<String>,
pub rebase_base: Option<String>,
pub rebase_use_root: bool,
pub async_tasks: Vec<AsyncTask>,
pub available_themes: Vec<String>,
#[allow(dead_code)]
pub font_family: Option<String>,
#[allow(dead_code)]
pub font_size: Option<u16>,
pub theme_picker: bool,
pub theme_picker_selected: usize,
pub theme_preview_prior: Option<ThemeConfig>,
pub load_full_diff: bool,
pub diff_focus: bool,
pub reset_pending: Option<String>,
pub op_status: Option<String>,
pub op_log: std::collections::VecDeque<String>,
pub show_op_log: bool,
pub merge_base_branch: String,
pub merge_notifier_enabled: bool,
pub merge_notifier_ahead: Option<i32>,
pub merge_notifier_interval_secs: u64,
pub merge_notifier_last_check: Option<std::time::Instant>,
pub merge_base_picker: bool,
pub merge_base_selected: usize,
pub push_ff_only_enforce: bool,
pub merge_base_candidates: Vec<String>,
pub merge_notifier_log: std::collections::VecDeque<String>,
pub show_merge_log: bool,
pub prune_merged_pending: bool,
pub remote_prune_pending: bool,
pub pull_ff_only: bool,
pub pull_autostash: bool,
pub pull_timeout_secs: u64,
pub rebase_timeout_secs: u64,
pub auto_fetch_enabled: bool,
pub auto_fetch_interval_secs: u64,
pub auto_fetch_last_check: Option<std::time::Instant>,
pub auto_fetch_remote: String,
pub pr_helper: bool,
pub pr_list: Vec<PrItem>,
pub pr_selected: usize,
pub conflicts_only: bool,
pub conflicts_popup: bool,
pub conflicts_popup_selected: usize,
pub conflicts_guided: bool,
pub conflicts_guided_selected: usize,
pub rebase_session: crate::app::rebase::RebaseSession,
pub rebase_editor_open: bool,
pub rebase_recovery_open: bool,
pub rebase_dirty: bool,
pub rebase_todo: Vec<String>,
pub rebase_todo_selected: usize,
pub show_rebase_todo: bool,
pub rebase_todo_dirty: bool,
pub rebase_todo_original: Vec<String>,
pub rebase_todo_path: Option<String>,
pub rebase_todo_editing: bool,
pub rebase_todo_edit_buffer: String,
pub reword_focus_field: RewordField,
pub reword_author_name: Option<String>,
pub reword_author_email: Option<String>,
pub edit_focus_field: RewordField,
pub edit_author_name: Option<String>,
pub edit_author_email: Option<String>,
pub workflow_context: Option<crate::app::workflow::WorkflowContext>,
pub custom_commands: std::collections::HashMap<String, String>,
pub background_image_path: Option<String>,
pub background_opacity: f32,
}