use super::PickerState;
use crate::AppModel;
use crate::boundary::Action;
use crate::boundary::reply::Reply;
use crate::cli_outbound::Cli;
use crate::model_pick::Pick;
use std::path::Path;
pub(super) fn apply(
picker: &mut PickerState,
model: &mut AppModel,
ws: &Path,
clis: (&Cli, &Cli),
pick: &Pick,
) {
let deps = model.boundary_deps(clis.0, clis.1);
let action = Action::PickModel {
workspace: ws.to_path_buf(),
role: pick.role.clone(),
provider: pick.provider.clone(),
model: pick.model.clone(),
};
picker.status = match model.dispatch(&deps, &crate::shell::now_ts(), &action) {
Ok(Reply::Outcome(outcome)) if outcome.ok() => {
format!("set {} → {} · {}", pick.role, pick.provider, pick.model)
}
Ok(Reply::Outcome(outcome)) => format!(
"⚠ lernie config: {} · {}",
crate::opslog::exit::ExitKind::of(outcome.exit, "lernie").label(),
outcome.stderr
),
Ok(other) => format!("⚠ unexpected reply: {other:?}"),
Err(e) => format!("⚠ {e}"),
};
picker.tip_providers = None;
picker.models_text = None;
picker.frozen = None;
}