use gtk4 as gtk;

use std::str::FromStr;

use crate::{
    model::{models::SignalReduce, Error, Frequency, Result},
    model_utils::signal_reducer::*,
    view::components::input::Input,
};

use gtk::{
    prelude::{Cast, CastNone, EditableExt, ListItemExt, ObjectExt, WidgetExt},
    ColumnView, Entry, Label, ListItem, SignalListItemFactory,
};

pub fn get_error_message(error: Error) -> Option<&'static str> {
    match error.to_string().as_str() {
        "cannot parse float from empty string" => Some("Вы не ввели данные в поле/-я"),
        "invalid float literal" => Some("Вы ввели не корректные данные в поле/-я"),
        _ => None,
    }
}

pub fn parse_fields(all_inputs: Vec<Input<Entry>>) -> Result<SignalReduce> {
    let mut values: [f64; 6] = [0.0; 6];

    for (i, input) in all_inputs.iter().enumerate() {
        let input_text_buffer = input.get_input();
        let extracted_value = f64::from_str(input_text_buffer.text().as_str().trim())?;
        values[i] = extracted_value;
    }

    Ok(SignalReduce {
        length: values[0],
        wire_resistance: values[1],
        wire_capacity: values[2],
        source_resistance: values[3],
        source_voltage: values[4],
        frequency: values[5],
    })
}