#ifndef _RIVE_STATE_TRANSITION_FLAGS_HPP_
#define _RIVE_STATE_TRANSITION_FLAGS_HPP_

#include <type_traits>

namespace rive {
enum class StateTransitionFlags : unsigned char {
    None = 0,

    /// Whether the transition is disabled.
    Disabled = 1 << 0,

    /// Whether the transition duration is a percentage or time in ms.
    DurationIsPercentage = 1 << 1,

    /// Whether exit time is enabled.
    EnableExitTime = 1 << 2,

    /// Whether the exit time is a percentage or time in ms.
    ExitTimeIsPercentage = 1 << 3,

    /// Whether the animation is held at exit or if it keeps advancing
    /// during mixing.
    PauseOnExit = 1 << 4

};

inline constexpr StateTransitionFlags operator&(StateTransitionFlags lhs,
                                                StateTransitionFlags rhs) {
    return static_cast<StateTransitionFlags>(
        static_cast<std::underlying_type<StateTransitionFlags>::type>(lhs) &
        static_cast<std::underlying_type<StateTransitionFlags>::type>(rhs));
}

inline constexpr StateTransitionFlags operator^(StateTransitionFlags lhs,
                                                StateTransitionFlags rhs) {
    return static_cast<StateTransitionFlags>(
        static_cast<std::underlying_type<StateTransitionFlags>::type>(lhs) ^
        static_cast<std::underlying_type<StateTransitionFlags>::type>(rhs));
}

inline constexpr StateTransitionFlags operator|(StateTransitionFlags lhs,
                                                StateTransitionFlags rhs) {
    return static_cast<StateTransitionFlags>(
        static_cast<std::underlying_type<StateTransitionFlags>::type>(lhs) |
        static_cast<std::underlying_type<StateTransitionFlags>::type>(rhs));
}

inline constexpr StateTransitionFlags operator~(StateTransitionFlags rhs) {
    return static_cast<StateTransitionFlags>(
        ~static_cast<std::underlying_type<StateTransitionFlags>::type>(rhs));
}

inline StateTransitionFlags& operator|=(StateTransitionFlags& lhs, StateTransitionFlags rhs) {
    lhs = static_cast<StateTransitionFlags>(
        static_cast<std::underlying_type<StateTransitionFlags>::type>(lhs) |
        static_cast<std::underlying_type<StateTransitionFlags>::type>(rhs));

    return lhs;
}

inline StateTransitionFlags& operator&=(StateTransitionFlags& lhs, StateTransitionFlags rhs) {
    lhs = static_cast<StateTransitionFlags>(
        static_cast<std::underlying_type<StateTransitionFlags>::type>(lhs) &
        static_cast<std::underlying_type<StateTransitionFlags>::type>(rhs));

    return lhs;
}

inline StateTransitionFlags& operator^=(StateTransitionFlags& lhs, StateTransitionFlags rhs) {
    lhs = static_cast<StateTransitionFlags>(
        static_cast<std::underlying_type<StateTransitionFlags>::type>(lhs) ^
        static_cast<std::underlying_type<StateTransitionFlags>::type>(rhs));

    return lhs;
}
} // namespace rive
#endif