use crate::config_edit::RealFileIo;
use crate::config_edit::brazen::{ProviderRow, RealBzRunner};
use crate::config_edit::lernie_global::LernieGlobal;
use crate::model_pick::ModelRow;
use crate::model_pick::query::Roster;
use crate::xdg::Env;
pub(super) struct FrozenMemo {
pub(super) key: (String, String, String),
pub(super) short_oid: String,
pub(super) row: ModelRow,
}
pub(super) struct BirthMemo {
pub(super) key: (String, String),
pub(super) row: ModelRow,
}
pub struct PickerState {
pub open: bool,
pub(super) role: Option<String>,
pub(super) provider: Option<String>,
pub(super) model: Option<String>,
pub(super) custom: Option<String>,
pub(super) roster: Option<Roster>,
pub(super) act: crate::shell::act::Held,
pub(super) frozen: Option<FrozenMemo>,
pub(super) birth: Option<BirthMemo>,
pub(super) tip_providers: Option<String>,
pub(super) rows: Option<Vec<ProviderRow>>,
pub(super) models_text: Option<String>,
pub(super) io: RealFileIo,
pub(super) bz_runner: RealBzRunner,
pub(super) wall: Vec<(String, String)>,
pub(super) lernie: LernieGlobal,
}
impl PickerState {
pub fn new(wall: &Env) -> Self {
Self {
open: false,
role: None,
provider: None,
model: None,
custom: None,
roster: None,
act: crate::shell::act::Held::default(),
frozen: None,
birth: None,
tip_providers: None,
rows: None,
models_text: None,
io: RealFileIo,
bz_runner: RealBzRunner::resolve(wall),
wall: crate::world::wall::pairs_of(wall),
lernie: LernieGlobal::resolve(wall),
}
}
pub fn toggle(&mut self) {
self.open = !self.open;
self.role = None;
self.forget_choice();
self.roster = None;
self.tip_providers = None;
self.rows = None;
self.models_text = None;
self.act.forget();
}
pub(super) fn forget_choice(&mut self) {
self.provider = None;
self.model = None;
self.custom = None;
}
}