Feature: CLI global options --data-dir, --config-path, and -v

  Background:
    Given global options test env is clean

  # -----------------------------------------------------------------------
  # --data-dir option
  # -----------------------------------------------------------------------

  @tdd_issue @tdd_issue_6785
  Scenario: --data-dir option is accepted with an existing directory
    Given a temp data dir is prepared
    When I run the global options CLI with data-dir flag and "version"
    Then the global options CLI should succeed

  Scenario: --data-dir option overrides CLEVERAGENTS_DATA_DIR for the invocation
    Given a temp data dir is prepared
    When I run the global options CLI with data-dir flag and "version"
    Then the CLEVERAGENTS_DATA_DIR env var should match the temp data dir

  Scenario: --data-dir with a path that is an existing file fails with a clear error
    Given a temp file path is prepared
    When I run the global options CLI with data-dir as temp file and "version"
    Then the global options CLI should fail
    And the global options output should contain "--data-dir"

  Scenario: --data-dir stores value in ctx.obj for subcommands
    Given a temp data dir is prepared
    When I run the global options CLI with data-dir flag and "version"
    Then the CLEVERAGENTS_DATA_DIR env var should match the temp data dir

  # -----------------------------------------------------------------------
  # --config-path option
  # -----------------------------------------------------------------------

  @tdd_issue @tdd_issue_6785
  Scenario: --config-path option is accepted with an existing file
    Given a temp config file is prepared
    When I run the global options CLI with config-path flag and "version"
    Then the global options CLI should succeed

  Scenario: --config-path overrides CLEVERAGENTS_CONFIG_PATH for the invocation
    Given a temp config file is prepared
    When I run the global options CLI with config-path flag and "version"
    Then the CLEVERAGENTS_CONFIG_PATH env var should match the temp config file

  Scenario: --config-path with a non-existent file fails with a clear error
    When I run the global options CLI with invalid config-path and "version"
    Then the global options CLI should fail
    And the global options output should contain "--config-path"

  Scenario: --config-path stores value in ctx.obj for subcommands
    Given a temp config file is prepared
    When I run the global options CLI with config-path flag and "version"
    Then the CLEVERAGENTS_CONFIG_PATH env var should match the temp config file

  # -----------------------------------------------------------------------
  # Combining --data-dir and --config-path
  # -----------------------------------------------------------------------

  Scenario: --data-dir and --config-path can be combined
    Given a temp data dir is prepared
    And a temp config file is prepared
    When I run the global options CLI with both path flags and "version"
    Then the global options CLI should succeed
    And the CLEVERAGENTS_DATA_DIR env var should match the temp data dir
    And the CLEVERAGENTS_CONFIG_PATH env var should match the temp config file

  # -----------------------------------------------------------------------
  # -v verbosity option
  # -----------------------------------------------------------------------

  Scenario: No -v flag results in CRITICAL (silent) log level
    When I call main_callback with verbosity 0
    Then the global options log level should be "CRITICAL"

  Scenario: Single -v flag results in ERROR log level
    When I call main_callback with verbosity 1
    Then the global options log level should be "ERROR"

  Scenario: -vv results in WARNING log level
    When I call main_callback with verbosity 2
    Then the global options log level should be "WARNING"

  Scenario: -vvv results in INFO log level
    When I call main_callback with verbosity 3
    Then the global options log level should be "INFO"

  Scenario: -vvvv results in DEBUG log level
    When I call main_callback with verbosity 4
    Then the global options log level should be "DEBUG"

  Scenario: -vvvvv or more results in DEBUG log level
    When I call main_callback with verbosity 5
    Then the global options log level should be "DEBUG"

  @tdd_issue @tdd_issue_6785
  Scenario: -v flag is accepted by the CLI without crashing
    When I run the global options CLI with args "-v version"
    Then the global options CLI should succeed

  Scenario: -vvv flags are accepted by the CLI without crashing
    When I run the global options CLI with args "-v -v -v version"
    Then the global options CLI should succeed

  # -----------------------------------------------------------------------
  # --help shows all three options
  # -----------------------------------------------------------------------

  Scenario: --help output includes --data-dir option
    When I run the global options CLI with args "--help"
    Then the global options output should contain "--data-dir"

  Scenario: --help output includes --config-path option
    When I run the global options CLI with args "--help"
    Then the global options output should contain "--config-path"

  Scenario: -v flag appears in --help output
    When I run the global options CLI with args "--help"
    Then the global options output should contain "-v"

  # -----------------------------------------------------------------------
  # -v verbosity stored in ctx.obj
  # -----------------------------------------------------------------------

  Scenario: verbose count is stored in ctx.obj
    When I call main_callback with verbosity 3
    Then the global options ctx obj "verbose" should be 3
