ai_code_buddy/widget_states/
analysis.rs

1use crate::core::review::Review;
2use bevy::prelude::*;
3
4#[derive(Debug, Clone, Resource)]
5pub struct AnalysisWidgetState {
6    pub is_analyzing: bool,
7    pub progress: f64,
8    pub current_file: String,
9    pub review: Option<Review>,
10    pub selected_issue: usize,
11}
12
13impl Default for AnalysisWidgetState {
14    fn default() -> Self {
15        Self {
16            is_analyzing: false,
17            progress: 0.0,
18            current_file: String::new(),
19            review: None,
20            selected_issue: 0,
21        }
22    }
23}
24
25impl AnalysisWidgetState {
26    pub fn start_analysis(&mut self) {
27        self.is_analyzing = true;
28        self.progress = 0.0;
29        self.current_file.clear();
30        self.review = None;
31    }
32
33    pub fn update_progress(&mut self, progress: f64, current_file: String) {
34        self.progress = progress;
35        self.current_file = current_file;
36    }
37
38    pub fn complete_analysis(&mut self, review: Review) {
39        self.is_analyzing = false;
40        self.progress = 100.0;
41        self.review = Some(review);
42        self.selected_issue = 0;
43    }
44
45    pub fn move_issue_selection(&mut self, direction: i32) {
46        if let Some(review) = &self.review {
47            if !review.issues.is_empty() {
48                let new_selection = (self.selected_issue as i32 + direction)
49                    .max(0)
50                    .min(review.issues.len() as i32 - 1)
51                    as usize;
52                self.selected_issue = new_selection;
53            }
54        }
55    }
56}