*** Settings ***
Documentation     Integration tests for enhanced version, info, diagnostics commands
Resource          ${CURDIR}/common.resource
Library           Process
Library           OperatingSystem
Library           String
Library           Collections
Suite Setup       Setup Test Environment
Suite Teardown    Cleanup Test Environment

*** Keywords ***
Run CLI With Clean Home
    [Documentation]    Run a CLI command with a temp HOME to avoid stale config
    [Arguments]    @{cmd}
    ${tmpdir}=    Evaluate    __import__('tempfile').mkdtemp(prefix='cli_core_')
    ${result}=    Run Process    @{cmd}    timeout=120s    on_timeout=kill    env:HOME=${tmpdir}
    RETURN    ${result}

*** Test Cases ***
Version Command Default Rich Format
    [Documentation]    Version command with default (rich) format shows version string
    ${result}=    Run Process    ${PYTHON}    -m    cleveragents    version    timeout=120s    on_timeout=kill
    Should Be Equal As Integers    ${result.rc}    0
    Should Contain    ${result.stdout}    1.0.0
    Should Contain    ${result.stdout}    CleverAgents

Version Command JSON Format
    [Documentation]    Version command with global --format json returns valid JSON
    ${result}=    Run Process    ${PYTHON}    -m    cleveragents    --format    json    version    timeout=120s    on_timeout=kill
    Should Be Equal As Integers    ${result.rc}    0
    Should Contain    ${result.stdout}    "version": "1.0.0"
    Should Contain    ${result.stdout}    "schema": "v3"
    Should Contain    ${result.stdout}    "channel": "stable"
    Should Contain    ${result.stdout}    "python"
    Should Contain    ${result.stdout}    "dependencies"
    Should Contain    ${result.stdout}    "build_date"
    Should Contain    ${result.stdout}    "commit"

Version Command Plain Format
    [Documentation]    Version command with global --format plain returns key-value pairs
    ${result}=    Run Process    ${PYTHON}    -m    cleveragents    --format    plain    version    timeout=120s    on_timeout=kill
    Should Be Equal As Integers    ${result.rc}    0
    Should Contain    ${result.stdout}    version: 1.0.0
    Should Contain    ${result.stdout}    schema: v3

Version Command YAML Format
    [Documentation]    Version command with global --format yaml returns YAML
    ${result}=    Run Process    ${PYTHON}    -m    cleveragents    --format    yaml    version    timeout=120s    on_timeout=kill
    Should Be Equal As Integers    ${result.rc}    0
    Should Contain    ${result.stdout}    version: 1.0.0
    Should Contain    ${result.stdout}    schema: v3

Info Command Default Rich Format
    [Documentation]    Info command with default (rich) format shows environment details
    ${result}=    Run Process    ${PYTHON}    -m    cleveragents    info    timeout=120s    on_timeout=kill
    Should Be Equal As Integers    ${result.rc}    0
    Should Contain    ${result.stdout}    Environment
    Should Contain    ${result.stdout}    Runtime

Info Command JSON Format
    [Documentation]    Info command with global --format json returns structured data
    ${result}=    Run CLI With Clean Home    ${PYTHON}    -m    cleveragents    --format    json    info
    Should Be Equal As Integers    ${result.rc}    0
    Should Contain    ${result.stdout}    "version": "1.0.0"
    Should Contain    ${result.stdout}    "data_dir"
    Should Contain    ${result.stdout}    "database"
    Should Contain    ${result.stdout}    "server_mode"

Info Command Plain Format
    [Documentation]    Info command with global --format plain returns key-value pairs
    ${result}=    Run CLI With Clean Home    ${PYTHON}    -m    cleveragents    --format    plain    info
    Should Be Equal As Integers    ${result.rc}    0
    Should Contain    ${result.stdout}    version: 1.0.0
    Should Contain    ${result.stdout}    server_mode:

Diagnostics Command Default Rich Format
    [Documentation]    Diagnostics command with default (rich) format runs checks
    ${result}=    Run Process    ${PYTHON}    -m    cleveragents    diagnostics    timeout=120s    on_timeout=kill
    Should Be Equal As Integers    ${result.rc}    0
    Should Contain    ${result.stdout}    Checks
    Should Contain    ${result.stdout}    Summary

Diagnostics Command JSON Format
    [Documentation]    Diagnostics command with global --format json returns structured data
    ${result}=    Run Process    ${PYTHON}    -m    cleveragents    --format    json    diagnostics    timeout=120s    on_timeout=kill
    Should Be Equal As Integers    ${result.rc}    0
    Should Contain    ${result.stdout}    "checks"
    Should Contain    ${result.stdout}    "summary"
    Should Contain    ${result.stdout}    "recommendations"
    Should Contain    ${result.stdout}    "total"
    Should Contain    ${result.stdout}    "warnings"
    Should Contain    ${result.stdout}    "errors"

Diagnostics Command Plain Format
    [Documentation]    Diagnostics command with global --format plain returns key-value pairs
    ${result}=    Run Process    ${PYTHON}    -m    cleveragents    --format    plain    diagnostics    timeout=120s    on_timeout=kill
    Should Be Equal As Integers    ${result.rc}    0
    Should Contain    ${result.stdout}    checks:
    Should Contain    ${result.stdout}    summary:

Diagnostics Command Check Flag Returns Valid Exit Code
    [Documentation]    Diagnostics --check exits 0 when no critical errors are found.
    ...               Disk-space errors are tolerated since CI runners may have low disk.
    ${result}=    Run Process    ${PYTHON}    -m    cleveragents    --format    json    diagnostics    --check    timeout=120s    on_timeout=kill
    Should Contain    ${result.stdout}    "checks"
    Should Contain    ${result.stdout}    "has_errors"
    # Accept exit code 0 (clean) or 1 if the only error is disk space (CI environment)
    IF    ${result.rc} != 0
        Should Contain    ${result.stdout}    Disk space    Diagnostics --check failed with non-disk error: ${result.stdout}
    END

Diagnostics Command Performance
    [Documentation]    Diagnostics command completes within acceptable time
    ${start}=    Get Time    epoch
    ${result}=    Run Process    ${PYTHON}    -m    cleveragents    --format    json    diagnostics    timeout=120s    on_timeout=kill
    ${end}=    Get Time    epoch
    ${duration}=    Evaluate    ${end} - ${start}
    Should Be True    ${duration} < 90    Diagnostics took too long: ${duration}s
    Should Be Equal As Integers    ${result.rc}    0
