// Copyright (c) 2023 Dominic Masters
// 
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT

#pragma once
#include "prefab/SceneItemPrefab.hpp"
#include "scene/components/Components.hpp"
#include "components/PlayerController.hpp"

namespace Dawn {
  class PlayerPrefab : public SceneItemPrefab<PlayerPrefab> {
    public:
      static std::vector<Asset*> prefabAssets(AssetManager *man) {
        std::vector<Asset*> assets;
        assets.push_back(man->get<TilesetAsset>("tileset_aqua"));
        assets.push_back(man->get<TextureAsset>("texture_aqua"));
        return assets;
      }
      
      //
      MeshHost *meshHost;
      TiledSprite *tiledSprite;
      Material *material;
      MeshRenderer *meshRenderer;
      PlayerController *playerController;

      PlayerPrefab(Scene *s, sceneitemid_t i) : SceneItemPrefab(s, i) {}

      void prefabInit(AssetManager *man) override {
        auto tileset = man->get<TilesetAsset>("tileset_aqua");
        auto texture = man->get<TextureAsset>("texture_aqua");

        meshHost = addComponent<MeshHost>();
        tiledSprite = addComponent<TiledSprite>();
        material = addComponent<Material>();
        meshRenderer = addComponent<MeshRenderer>();
        playerController = addComponent<PlayerController>();

        tiledSprite->setTilesetAndSize(&tileset->tileset);
        tiledSprite->setTile(896);
        
        material->textureValues[material->getShader()->getParameterByName("u_Text")] = &texture->texture;
      }
  };
}