use std::collections::HashMap;
use std::ops::{Deref, DerefMut};

use bevy::prelude::Resource;
use serde_json::Value;

use crate::LdtkLevel;

#[derive(Resource, Default)]
pub struct LevelIndex(pub HashMap<String, LdtkLevel>);
impl Deref for LevelIndex {
	type Target = HashMap<String, LdtkLevel>;
	fn deref(&self) -> &Self::Target {
		&self.0
	}
}
impl DerefMut for LevelIndex {
	fn deref_mut(&mut self) -> &mut Self::Target {
		&mut self.0
	}
}

#[derive(Default)]
pub struct TileMetadata(pub HashMap<i64, Value>);

#[derive(Resource, Default)]
pub struct TilesetIndex(pub HashMap<String, TileMetadata>);
impl Deref for TilesetIndex {
	type Target = HashMap<String, TileMetadata>;
	fn deref(&self) -> &Self::Target {
		&self.0
	}
}
impl DerefMut for TilesetIndex {
	fn deref_mut(&mut self) -> &mut Self::Target {
		&mut self.0
	}
}