use crate::{blocks_items::{BlockItem, BlockItemID, ItemStack}, player::Direction};

use byteorder::{ReadBytesExt, WriteBytesExt, BE};
use num_traits::FromPrimitive;

use super::Packet;

#[derive(Debug, Clone, Copy)]
pub struct Packet15Place {
    id: BlockItem,
    x_position: i32,
    y_position: u8,
    z_position: i32,
    direction: u8,
    amount: Option<u8>,
    health: Option<i16>,
}

impl Packet for Packet15Place {
    fn read_from<R: std::io::Read>(input: &mut R) -> Result<Self, std::io::Error> {
        let id = BlockItem::from_id(input.read_i16::<BE>()?);
        Ok(Self {
            id,
            x_position: input.read_i32::<BE>()?,
            y_position: input.read_u8()?,
            z_position: input.read_i32::<BE>()?,
            direction: input.read_u8()?,
            amount: if id.id() <= 0 { None } else { Some(input.read_u8()?) },
            health: if id.id() <= 0 { None } else { Some(input.read_i16::<BE>()?) }
        })
    }

    fn write_into<W: std::io::Write>(&self, output: &mut W) -> Result<(), std::io::Error> {
        unimplemented!()
    }

    fn size(&self) -> usize {
        todo!()
    }
}