from __future__ import annotations

from enum import StrEnum


class CommandStatus(StrEnum):
    STABLE = "stable"
    EXPERIMENTAL = "experimental"
    DEPRECATED = "deprecated"

class ParameterScope(StrEnum):
    GLOBAL = "global"
    COMMAND = "command"


class ParameterKind(StrEnum):
    OPTION = "option"
    FLAG = "flag"
    ARGUMENT = "argument"
    INPUT_SOURCE = "input_source"


class ParameterGroup(StrEnum):
    REQUIRED_INPUTS = "required_inputs"
    CONDITIONAL_INPUTS = "conditional_inputs"
    OPTIONAL_INPUTS = "optional_inputs"
    INPUT_SOURCES = "input_sources"
    EXECUTION_CONTROLS = "execution_controls"
    OUTPUT_CONTROLS = "output_controls"
    ADVANCED = "advanced"


class ParameterVisibility(StrEnum):
    DEFAULT = "default"
    HIDDEN = "hidden"


class ValueKind(StrEnum):
    STRING = "string"
    INTEGER = "integer"
    NUMBER = "number"
    BOOLEAN = "boolean"
    ENUM = "enum"
    PATH = "path"
    URL = "url"
    TIMESTAMP = "timestamp"
    ARRAY = "array"
    OBJECT = "object"


class RequirednessMode(StrEnum):
    REQUIRED = "required"
    OPTIONAL = "optional"
    CONDITIONAL = "conditional"


class DefaultKind(StrEnum):
    STATIC = "static"
    DYNAMIC = "dynamic"
    NONE = "none"


class InputSourceKind(StrEnum):
    CLI = "cli"
    INPUT_JSON = "input_json"
    STDIN = "stdin"
    ENV = "env"
    DEFAULT = "default"


class ConstraintType(StrEnum):
    REQUIRES = "requires"
    CONFLICTS = "conflicts"
    ONE_OF = "one_of"
    ALL_OR_NONE = "all_or_none"
    WHEN_THEN_REQUIRES = "when_then_requires"
    WHEN_THEN_FORBIDS = "when_then_forbids"
    RANGE = "range"


class ConstraintSeverity(StrEnum):
    ERROR = "error"
    WARNING = "warning"


class ExampleCategory(StrEnum):
    MINIMAL = "minimal"
    COMMON = "common"
    AUTOMATION = "automation"
