use solverforge_core::domain::{PlanningSolution, SolutionDescriptor};
pub trait Director<S: PlanningSolution>: Send {
fn working_solution(&self) -> &S;
fn working_solution_mut(&mut self) -> &mut S;
fn calculate_score(&mut self) -> S::Score;
fn solution_descriptor(&self) -> &SolutionDescriptor;
fn clone_working_solution(&self) -> S;
fn before_variable_changed(&mut self, descriptor_index: usize, entity_index: usize);
fn after_variable_changed(&mut self, descriptor_index: usize, entity_index: usize);
fn entity_count(&self, descriptor_index: usize) -> Option<usize>;
fn total_entity_count(&self) -> Option<usize>;
fn is_incremental(&self) -> bool {
false
}
fn reset(&mut self) {}
fn register_undo(&mut self, _undo: Box<dyn FnOnce(&mut S) + Send>) {
}
}