//! The main guts of the Preferences window. We store all our preferences in
//! `UserDefaults`, so there's not too much extra needed here - we can do most
//! event handlers inline.

use cacao::layout::{Layout, LayoutConstraint};
use cacao::view::{View, ViewDelegate};

use crate::storage::Defaults;

use super::toggle_option_view::ToggleOptionView;

/// A general preferences view.
#[derive(Debug, Default)]
pub struct GeneralPreferencesContentView {
    pub example_option: ToggleOptionView
}

impl ViewDelegate for GeneralPreferencesContentView {
    const NAME: &'static str = "GeneralPreferencesContentView";

    fn did_load(&mut self, view: View) {
        self.example_option.configure(
            "An example preference",
            "This can be true, or it can be false.",
            Defaults::should_whatever(), // initial value
            Defaults::toggle_should_whatever
        );

        view.add_subview(&self.example_option.view);

        LayoutConstraint::activate(&[
            self.example_option.view.top.constraint_equal_to(&view.top).offset(22.),
            self.example_option
                .view
                .leading
                .constraint_equal_to(&view.leading)
                .offset(22.),
            self.example_option
                .view
                .trailing
                .constraint_equal_to(&view.trailing)
                .offset(-22.),
            self.example_option.view.bottom.constraint_equal_to(&view.bottom).offset(-22.)
        ]);
    }
}