use attract::Generator;
use nav::Transform;
use serde::{Deserialize, Serialize};
use crate::common::{attractor_builder::AttractorBuilder, generator_builder::GeneratorBuilder};
#[derive(Debug, Serialize, Deserialize)]
pub struct RenderingSettings<T> {
pub resolution: [usize; 2],
pub offset: [T; 2],
pub scale: T,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ProcessingSettings {
pub num_samples: usize,
pub num_groups: usize,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct SimulationSettings {
pub max_iter: usize,
pub warmup: usize,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct PostProcessingSettings {
pub apply_log: bool,
pub colour_map: String,
pub output_dir: String,
pub image_name: String,
pub transform: Option<Transform>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Configuration<T> {
pub attractor: AttractorBuilder<T>,
pub generator: GeneratorBuilder<T>,
pub num_frames: usize,
pub rendering: RenderingSettings<T>,
pub processing: ProcessingSettings,
pub simulation: SimulationSettings,
pub post_processing: PostProcessingSettings,
}