use bevy::prelude::*;

use crate::{asset_loading::GltfAssets, GameState};

pub fn map_plugin(app: &mut App) {
    app.add_systems(OnEnter(GameState::Playing), spawn_level);
}

fn spawn_level(
    mut commands: Commands,
    models: Res<Assets<Gltf>>,
    gltf_assets: Res<GltfAssets>
) {
    println!("LIBRARY: {:?}", gltf_assets.library);
    let mut x_offset = 0.0;
    for mesh_name in ["corner_inside", "corner_outside", "wall", "door", "round_door", "round_hole"] {
        let path = format!("meshes/library/space_{}.glb", mesh_name);
        let handle = gltf_assets.library.get(&path).expect(&format!("Couldn't find {} in library", mesh_name));
        let gltf = models.get(handle).expect(&format!("No model for {}", mesh_name));

        let asset = gltf.default_scene.as_ref().expect(&format!("No scene in {}", mesh_name));
        commands.spawn((SceneRoot(asset.clone()), TransformBundle::from_transform(Transform::from_xyz(x_offset, 0.0, 0.0))));
        x_offset += 2.0;
    }
}
