use proto::item_bin::Detail;
use proto::{EquipBin, ItemBin};

use super::BaseItem;

#[derive(Default)]
pub struct Equip {
    pub base: BaseItem,
    pub is_locked: bool,
}

impl Equip {
    pub fn to_client(&self, detail: proto::equip::Detail) -> proto::Item {
        self.base
            .to_client(proto::item::Detail::Equip(proto::Equip {
                is_locked: self.is_locked,
                detail: Some(detail),
            }))
    }

    pub fn from_bin(bin: ItemBin, detail: EquipBin) -> Self {
        Self {
            base: BaseItem::from_bin(bin),
            is_locked: detail.is_locked,
        }
    }

    pub fn to_bin(&self, item_type: u32) -> ItemBin {
        let mut item_bin = self.base.to_bin(item_type);
        item_bin.detail = Some(Detail::Equip(EquipBin {
            is_locked: self.is_locked,
            ..Default::default()
        }));

        item_bin
    }
}
