#pragma once
#include <string>

namespace Create::Exceptions {
    enum Type {
        None,
        ComponentLoad,
        MissingField,
        InvalidFormat,
        SystemFailure,
        AssetMissing,
        FileIO,
        RuntimeLogic
    };

    const char* ExceptionToString(Type type);
}

class RecoverableError {
public:
    RecoverableError(const std::string& msg, Create::Exceptions::Type type = Create::Exceptions::None);
    void Handle() const;

private:
    std::string message;
    Create::Exceptions::Type type;
};

class FatalError {
public:
    FatalError(const std::string& msg, Create::Exceptions::Type type = Create::Exceptions::None);
};
