esphome:
  name: test-script-queued

host:
api:
  actions:
    # Test 1: Queue depth with default max_runs=5
    - action: test_queue_depth
      then:
        - logger.log: "=== TEST 1: Queue depth (max_runs=5 means 5 total, reject 6-7) ==="
        - script.execute:
            id: queue_depth_script
            value: 1
        - script.execute:
            id: queue_depth_script
            value: 2
        - script.execute:
            id: queue_depth_script
            value: 3
        - script.execute:
            id: queue_depth_script
            value: 4
        - script.execute:
            id: queue_depth_script
            value: 5
        - script.execute:
            id: queue_depth_script
            value: 6
        - script.execute:
            id: queue_depth_script
            value: 7

    # Test 2: Ring buffer wrap test
    - action: test_ring_buffer
      then:
        - logger.log: "=== TEST 2: Ring buffer wrap (should process A, B, C in order) ==="
        - script.execute:
            id: wrap_script
            msg: "A"
        - script.execute:
            id: wrap_script
            msg: "B"
        - script.execute:
            id: wrap_script
            msg: "C"

    # Test 3: Stop clears queue
    - action: test_stop_clears
      then:
        - logger.log: "=== TEST 3: Stop clears queue (should only see 1, then 'STOPPED') ==="
        - script.execute:
            id: stop_script
            num: 1
        - script.execute:
            id: stop_script
            num: 2
        - script.execute:
            id: stop_script
            num: 3
        - delay: 50ms
        - logger.log: "STOPPING script now"
        - script.stop: stop_script

    # Test 4: Verify rejection (max_runs=3)
    - action: test_rejection
      then:
        - logger.log: "=== TEST 4: Verify rejection (max_runs=3 means 3 total, reject 4-8) ==="
        - script.execute:
            id: rejection_script
            val: 1
        - script.execute:
            id: rejection_script
            val: 2
        - script.execute:
            id: rejection_script
            val: 3
        - script.execute:
            id: rejection_script
            val: 4
        - script.execute:
            id: rejection_script
            val: 5
        - script.execute:
            id: rejection_script
            val: 6
        - script.execute:
            id: rejection_script
            val: 7
        - script.execute:
            id: rejection_script
            val: 8

    # Test 5: No parameters test
    - action: test_no_params
      then:
        - logger.log: "=== TEST 5: No params (should process 3 times) ==="
        - script.execute: no_params_script
        - script.execute: no_params_script
        - script.execute: no_params_script

logger:
  level: DEBUG

script:
  # Test script 1: Queue depth test (default max_runs=5)
  - id: queue_depth_script
    mode: queued
    parameters:
      value: int
    then:
      - logger.log:
          format: "Queue test: START item %d"
          args: ['value']
      - delay: 100ms
      - logger.log:
          format: "Queue test: END item %d"
          args: ['value']

  # Test script 2: Ring buffer wrap test (max_runs=3)
  - id: wrap_script
    mode: queued
    max_runs: 3
    parameters:
      msg: string
    then:
      - logger.log:
          format: "Ring buffer: START '%s'"
          args: ['msg.c_str()']
      - delay: 50ms
      - logger.log:
          format: "Ring buffer: END '%s'"
          args: ['msg.c_str()']

  # Test script 3: Stop test
  - id: stop_script
    mode: queued
    max_runs: 5
    parameters:
      num: int
    then:
      - logger.log:
          format: "Stop test: START %d"
          args: ['num']
      - delay: 100ms
      - logger.log:
          format: "Stop test: END %d"
          args: ['num']

  # Test script 4: Rejection test (max_runs=3)
  - id: rejection_script
    mode: queued
    max_runs: 3
    parameters:
      val: int
    then:
      - logger.log:
          format: "Rejection test: START %d"
          args: ['val']
      - delay: 200ms
      - logger.log:
          format: "Rejection test: END %d"
          args: ['val']

  # Test script 5: No parameters
  - id: no_params_script
    mode: queued
    then:
      - logger.log: "No params: START"
      - delay: 50ms
      - logger.log: "No params: END"
