# -*- coding: utf-8 -*-

import sys
from enum import Enum


class _StrEnum(str, Enum):
    def __new__(cls, *values):
        if len(values) > 3:
            raise TypeError("too many arguments for str(): %r" % (values,))
        if len(values) == 1:
            # it must be a string
            if not isinstance(values[0], str):
                raise TypeError("%r is not a string" % (values[0],))
        if len(values) >= 2:
            # check that encoding argument is a string
            if not isinstance(values[1], str):
                raise TypeError("encoding must be a string, not %r" % (values[1],))
        if len(values) == 3:
            # check that errors argument is a string
            if not isinstance(values[2], str):
                raise TypeError("errors must be a string, not %r" % (values[2]))
        value = str(*values)
        member = str.__new__(cls, value)
        member._value_ = value
        return member

    # noinspection PyMethodParameters
    def _generate_next_value_(name, start, count, last_values):
        return name.lower()


if sys.version_info[:2] >= (3, 11):
    from enum import StrEnum  # noqa
else:
    StrEnum = _StrEnum
