use eframe::{App, Frame, egui::CentralPanel};
use egui_file::FileDialog;
use std::path::PathBuf;

mod fake_fs;

#[derive(Default)]
pub struct Demo {
  opened_file: Option<PathBuf>,
  open_file_dialog: Option<FileDialog>,
}

impl App for Demo {
  fn ui(&mut self, ui: &mut egui::Ui, _frame: &mut Frame) {
    CentralPanel::default().show_inside(ui, |ui| {
      if (ui.button("Open")).clicked() {
        let mut dialog = FileDialog::open_file()
          .with_fs(Box::new(fake_fs::FakeFs::new()))
          .initial_path("/");
        dialog.open();
        self.open_file_dialog = Some(dialog);
      }

      if let Some(dialog) = &mut self.open_file_dialog
        && dialog.show(ui).selected()
        && let Some(file) = dialog.path()
      {
        self.opened_file = Some(file.to_path_buf());
      }
    });
  }
}

fn main() {
  let _ = eframe::run_native(
    "VFS File Dialog Demo",
    eframe::NativeOptions::default(),
    Box::new(|_cc| Ok(Box::new(Demo::default()))),
  );
}
