use crate::heads::HeadState;
use bevy::prelude::*;

#[derive(Clone, Copy, Debug, PartialEq, Reflect, Default)]
pub struct UiHeadState {
    pub head: usize,
    pub health: f32,
    pub ammo: f32,
    pub reloading: Option<f32>,
}

impl UiHeadState {
    pub fn damage(&self) -> f32 {
        1. - self.health
    }

    pub fn ammo_used(&self) -> f32 {
        1. - self.ammo
    }

    pub fn reloading(&self) -> Option<f32> {
        self.reloading
    }

    pub(crate) fn new(value: HeadState, time: f32) -> Self {
        let reloading = if value.has_ammo() {
            None
        } else {
            Some((time - value.last_use) / value.reload_duration)
        };

        Self {
            head: value.head,
            ammo: value.ammo as f32 / value.ammo_max as f32,
            health: value.health as f32 / value.health_max as f32,
            reloading,
        }
    }
}
