1use std::{collections::HashSet, fs, path::PathBuf};
2use ratatui::{
3 layout::{Alignment, Rect}, style::{Color, Style}, text::{Span}, widgets::{Block, BorderType, Borders, Paragraph}, Frame
4};
5pub mod constellations;
6pub mod menu;
7pub mod game;
8pub mod planetarium;
9
10
11pub fn draw_border(frame: &mut Frame, area: Rect) {
12 if area.width < 10 || area.height < 3 {
13 let warning = Paragraph::new("Terminal too small!")
14 .alignment(Alignment::Center)
15 .style(Style::default().fg(Color::Yellow));
16 frame.render_widget(warning, area);
17 return;
18 }
19 let block = Block::new()
20 .border_type(BorderType::Rounded)
21 .borders(Borders::ALL)
22 .border_style(Style::default().fg(Color::White));
23 frame.render_widget(block, area);
24}
25
26pub fn draw_exit_instructions(frame: &mut Frame, area: Rect) {
27 let instructions = Span::styled("< Esc", Style::default().fg(Color::Yellow));
28 let paragraph = Paragraph::new(instructions);
29 frame.render_widget(paragraph, area);
30}
31
32fn storage_path() -> PathBuf {
33 let mut path = dirs::home_dir().expect("Cannt find home directory");
34 path.push(".polaris.json");
35 path
36}
37
38pub fn load_data() -> HashSet<String> {
39 let path = storage_path();
40 if let Ok(data) = fs::read_to_string(&path) {
41 serde_json::from_str(&data).unwrap_or_default()
42 } else {
43 HashSet::new()
44 }
45}
46
47pub fn save_data(data: &HashSet<String>) {
48 let path = storage_path();
49 let data = serde_json::to_string_pretty(data).unwrap();
50 fs::write(path, data).unwrap();
51}