use ratatui::Frame;
use super::dashboard::{
render_dashboard_branches_panel, render_dashboard_commits_panel, render_dashboard_files_panel,
render_dashboard_footer, render_dashboard_main_panel, render_dashboard_stash_panel,
render_dashboard_status_panel,
};
use super::helpers::calculate_layout_areas;
use super::overlays::{
render_blame_view_overlay, render_branch_compare_overlay, render_branch_select_overlay,
render_change_coupling_view_overlay, render_detail_overlay, render_file_history_view_overlay,
render_handoff_view_overlay, render_heatmap_view_overlay, render_help_overlay,
render_impact_score_view_overlay, render_next_actions_view_overlay,
render_ownership_view_overlay, render_patch_view_overlay, render_pr_create_overlay,
render_preset_save_dialog, render_quality_score_view_overlay, render_quick_action_overlay,
render_quick_commit_overlay, render_related_files_overlay, render_review_pack_view_overlay,
render_review_queue_overlay, render_stash_view_overlay, render_stats_view_overlay,
render_status_view_overlay, render_timeline_view_overlay, render_topology_view_overlay,
};
use crate::app::{App, InputMode, SidebarPanel};
pub fn render(frame: &mut Frame, app: &App) {
let area = frame.area();
let layout = calculate_layout_areas(area, app);
render_dashboard_footer(frame, layout.footer, app);
let panels = SidebarPanel::all();
for (i, &panel) in panels.iter().enumerate() {
let is_active = app.active_sidebar_panel == panel && app.sidebar_focused;
match panel {
SidebarPanel::Status => {
render_dashboard_status_panel(frame, layout.sidebar_panels[i], app, is_active)
}
SidebarPanel::Commits => {
render_dashboard_commits_panel(frame, layout.sidebar_panels[i], app, is_active)
}
SidebarPanel::Branches => {
render_dashboard_branches_panel(frame, layout.sidebar_panels[i], app, is_active)
}
SidebarPanel::Files => {
render_dashboard_files_panel(frame, layout.sidebar_panels[i], app, is_active)
}
SidebarPanel::Stash => {
render_dashboard_stash_panel(frame, layout.sidebar_panels[i], app, is_active)
}
}
}
render_dashboard_main_panel(frame, layout.dashboard_main, app);
if app.show_help {
render_help_overlay(frame, app);
return;
}
if app.show_detail {
render_detail_overlay(frame, app);
}
if app.input_mode == InputMode::BranchSelect || app.input_mode == InputMode::BranchCreate {
render_branch_select_overlay(frame, app);
}
if app.input_mode == InputMode::StatusView {
render_status_view_overlay(frame, app);
}
if app.input_mode == InputMode::CommitInput {
render_quick_commit_overlay(frame, app);
}
if app.input_mode == InputMode::TopologyView {
render_topology_view_overlay(frame, app);
}
if app.input_mode == InputMode::StatsView {
render_stats_view_overlay(frame, app);
}
if app.input_mode == InputMode::HeatmapView {
render_heatmap_view_overlay(frame, app);
}
if app.input_mode == InputMode::FileHistoryView {
render_file_history_view_overlay(frame, app);
}
if app.input_mode == InputMode::TimelineView {
render_timeline_view_overlay(frame, app);
}
if app.input_mode == InputMode::BlameView {
render_blame_view_overlay(frame, app);
}
if app.input_mode == InputMode::OwnershipView {
render_ownership_view_overlay(frame, app);
}
if app.input_mode == InputMode::StashView {
render_stash_view_overlay(frame, app);
}
if app.input_mode == InputMode::PatchView {
render_patch_view_overlay(frame, app);
}
if app.input_mode == InputMode::BranchCompareView {
render_branch_compare_overlay(frame, app);
}
if app.input_mode == InputMode::RelatedFilesView {
render_related_files_overlay(frame, app);
}
if app.input_mode == InputMode::ImpactScoreView {
render_impact_score_view_overlay(frame, app);
}
if app.input_mode == InputMode::ChangeCouplingView {
render_change_coupling_view_overlay(frame, app);
}
if app.input_mode == InputMode::QualityScoreView {
render_quality_score_view_overlay(frame, app);
}
if app.input_mode == InputMode::PresetSave {
render_preset_save_dialog(frame, app);
}
if app.input_mode == InputMode::QuickActionView {
render_quick_action_overlay(frame, app);
}
if app.input_mode == InputMode::ReviewQueueView {
render_review_queue_overlay(frame, app);
}
if app.input_mode == InputMode::PrCreate {
render_pr_create_overlay(frame, app);
}
if app.input_mode == InputMode::ReviewPackView {
render_review_pack_view_overlay(frame, app);
}
if app.input_mode == InputMode::NextActionsView {
render_next_actions_view_overlay(frame, app);
}
if app.input_mode == InputMode::HandoffView {
render_handoff_view_overlay(frame, app);
}
}