//
// Created by sebastian on 30.07.26.
//

#ifndef COLORRACE_ASSETTYPES_H
#define COLORRACE_ASSETTYPES_H
#pragma once

#include <cstdint>
#include <string_view>

namespace engine {

    enum class AssetType : uint8_t
    {
        Texture,
        Model
    };


    enum class TextureType : uint8_t
    {
        Diffuse,
        Specular,
        Normal,
        Emissive,
        Opacity,

        Count
    };


    enum class ModelSplitPolicy : uint8_t
    {
        Combined,
        ByMaterial,
        ByObject
    };


    constexpr std::string_view toString(TextureType type)
    {
        switch(type)
        {
            case TextureType::Diffuse:  return "Diffuse";
            case TextureType::Specular: return "Specular";
            case TextureType::Normal:   return "Normal";
            case TextureType::Emissive: return "Emissive";
            case TextureType::Opacity:  return "Opacity";
            case TextureType::Count:    break;
        }

        return "Unknown";
    }


    constexpr std::string_view toString(ModelSplitPolicy policy)
    {
        switch(policy)
        {
            case ModelSplitPolicy::Combined:
                return "Combined";

            case ModelSplitPolicy::ByMaterial:
                return "ByMaterial";

            case ModelSplitPolicy::ByObject:
                return "ByObject";
        }

        return "Unknown";
    }

}
#endif //COLORRACE_ASSETTYPES_H
