*** Settings ***
Documentation     Actor-first context management tests for CleverAgents CLI
Library           Process
Library           OperatingSystem
Library           String
Library           DateTime
Resource          ${CURDIR}/common.resource
Suite Setup       Setup Test Environment
Suite Teardown    Cleanup Test Environment

*** Variables ***
${TEST_PROJECT_DIR}     ${TEMPDIR}/test_project_${EMPTY}
${UNIQUE_ID}            ${EMPTY}

*** Test Cases ***
Test Context Commands With Actor
    [Documentation]    Verify context commands work with actor-first approach

    # Initialize project first
    Create Directory    ${TEST_PROJECT_DIR}
    ${result} =    Run Process    ${PYTHON}    -m    cleveragents    init    test-project
    ...    cwd=${TEST_PROJECT_DIR}
    Log    Init stdout: ${result.stdout}
    Log    Init stderr: ${result.stderr}
    Should Be Equal As Integers    ${result.rc}    0

    # Create test files
    Create Directory    ${TEST_PROJECT_DIR}/src
    Create File    ${TEST_PROJECT_DIR}/src/main.py    print("Hello World")

    # Load context with actor (simulating with environment variable)
    Set Environment Variable    CLEVERAGENTS_TESTING_USE_MOCK_AI    true
    Set Environment Variable    CLEVERAGENTS_DEFAULT_ACTOR    openai/gpt-4

    ${result} =    Run Process    ${PYTHON}    -m    cleveragents    context-load    src/
    ...    cwd=${TEST_PROJECT_DIR}
    Should Be Equal As Integers    ${result.rc}    0

    # List contexts
    ${result} =    Run Process    ${PYTHON}    -m    cleveragents    context    list
    ...    cwd=${TEST_PROJECT_DIR}
    Should Be Equal As Integers    ${result.rc}    0
    Should Contain    ${result.stdout}    main.py

Test Plan Creation With Actor
    [Documentation]    Test plan creation using actor instead of provider/model

    # Initialize project
    Create Directory    ${TEST_PROJECT_DIR}_plan
    ${result} =    Run Process    ${PYTHON}    -m    cleveragents    init    test-plan-project
    ...    cwd=${TEST_PROJECT_DIR}_plan
    Should Be Equal As Integers    ${result.rc}    0

    # Create plan with actor
    Set Environment Variable    CLEVERAGENTS_TESTING_USE_MOCK_AI    true
    Set Environment Variable    CLEVERAGENTS_DEFAULT_ACTOR    anthropic/claude-3

    ${result} =    Run Process    ${PYTHON}    -m    cleveragents    tell    Create a hello world function
    ...    cwd=${TEST_PROJECT_DIR}_plan    env:CLEVERAGENTS_TESTING_USE_MOCK_AI=true
    Log    Tell stdout: ${result.stdout}
    Log    Tell stderr: ${result.stderr}
    Should Be Equal As Integers    ${result.rc}    0
    Should Contain    ${result.stdout}    Plan

Test Actor-Based Workflow
    [Documentation]    Test complete workflow with actor configuration

    # Initialize
    ${project_dir} =    Set Variable    ${TEST_PROJECT_DIR}_workflow
    Create Directory    ${project_dir}
    ${result} =    Run Process    ${PYTHON}    -m    cleveragents    init    workflow-project
    ...    cwd=${project_dir}
    Should Be Equal As Integers    ${result.rc}    0

    # Set up actor environment
    Set Environment Variable    CLEVERAGENTS_TESTING_USE_MOCK_AI    true
    Set Environment Variable    CLEVERAGENTS_DEFAULT_ACTOR    openai/gpt-4

    # Add context
    Create File    ${project_dir}/test.py    def hello():\n${SPACE*4}pass
    ${result} =    Run Process    ${PYTHON}    -m    cleveragents    context-load    test.py
    ...    cwd=${project_dir}
    Should Be Equal As Integers    ${result.rc}    0

    # Create plan
    ${result} =    Run Process    ${PYTHON}    -m    cleveragents    tell    Add docstring to hello function
    ...    cwd=${project_dir}    env:CLEVERAGENTS_TESTING_USE_MOCK_AI=true
    Should Be Equal As Integers    ${result.rc}    0

    # Build plan
    ${result} =    Run Process    ${PYTHON}    -m    cleveragents    build
    # Normal duration: ~10-15s. Timeout raised from 30s to 120s for pabot
    # cold-start (16 parallel processes) + Alembic migration overhead.
    ...    cwd=${project_dir}    env:CLEVERAGENTS_TESTING_USE_MOCK_AI=true    timeout=120s    on_timeout=kill
    Should Be Equal As Integers    ${result.rc}    0

    # NOTE: Legacy 'apply' was removed. Verify v3 apply --help instead.
    ${result} =    Run Process    ${PYTHON}    -m    cleveragents    apply    --help
    ...    cwd=${project_dir}
    Should Be Equal As Integers    ${result.rc}    0

Test Multiple Actors In Project
    [Documentation]    Test switching between actors in a project

    ${project_dir} =    Set Variable    ${TEST_PROJECT_DIR}_multi_actor

    # Initialize
    Create Directory    ${project_dir}
    ${result} =    Run Process    ${PYTHON}    -m    cleveragents    init    multi-actor-project
    ...    cwd=${project_dir}
    Should Be Equal As Integers    ${result.rc}    0

    Set Environment Variable    CLEVERAGENTS_TESTING_USE_MOCK_AI    true

    # Create plan with first actor
    Set Environment Variable    CLEVERAGENTS_DEFAULT_ACTOR    openai/gpt-3.5-turbo
    ${result} =    Run Process    ${PYTHON}    -m    cleveragents    tell    Create function A    --name    plan1
    ...    cwd=${project_dir}    env:CLEVERAGENTS_TESTING_USE_MOCK_AI=true
    Should Be Equal As Integers    ${result.rc}    0

    # Create plan with second actor
    Set Environment Variable    CLEVERAGENTS_DEFAULT_ACTOR    anthropic/claude-3
    ${result} =    Run Process    ${PYTHON}    -m    cleveragents    tell    Create function B    --name    plan2
    ...    cwd=${project_dir}    env:CLEVERAGENTS_TESTING_USE_MOCK_AI=true
    Should Be Equal As Integers    ${result.rc}    0

    # Verify plans were created (legacy plan commands are deprecated;
    # the v3 'plan list' command lists lifecycle plans only)
    Log    Legacy plan creation verified via 'tell' commands above

Test Context Clear Command
    [Documentation]    Test clearing all contexts

    ${project_dir} =    Set Variable    ${TEST_PROJECT_DIR}_clear

    # Initialize and add contexts
    Create Directory    ${project_dir}
    ${result} =    Run Process    ${PYTHON}    -m    cleveragents    init    clear-project
    ...    cwd=${project_dir}
    Should Be Equal As Integers    ${result.rc}    0

    Set Environment Variable    CLEVERAGENTS_TESTING_USE_MOCK_AI    true

    # Create a plan first
    ${result} =    Run Process    ${PYTHON}    -m    cleveragents    tell    Test clearing contexts
    ...    cwd=${project_dir}    env:CLEVERAGENTS_TESTING_USE_MOCK_AI=true
    Should Be Equal As Integers    ${result.rc}    0

    Create File    ${project_dir}/file1.py    # test file 1
    Create File    ${project_dir}/file2.py    # test file 2

    ${result} =    Run Process    ${PYTHON}    -m    cleveragents    context-load    file1.py    file2.py
    ...    cwd=${project_dir}    env:CLEVERAGENTS_TESTING_USE_MOCK_AI=true
    Should Be Equal As Integers    ${result.rc}    0

    # Clear contexts
    ${result} =    Run Process    ${PYTHON}    -m    cleveragents    context    clear    --yes
    ...    cwd=${project_dir}    env:CLEVERAGENTS_TESTING_USE_MOCK_AI=true
    Log    Clear stdout: ${result.stdout}
    Log    Clear stderr: ${result.stderr}
    Should Be Equal As Integers    ${result.rc}    0

    # Verify contexts are cleared
    ${result} =    Run Process    ${PYTHON}    -m    cleveragents    context    list
    ...    cwd=${project_dir}
    Should Be Equal As Integers    ${result.rc}    0
    Should Not Contain    ${result.stdout}    file1.py
    Should Not Contain    ${result.stdout}    file2.py

*** Keywords ***
Setup Test Environment
    [Documentation]    Create test environment
    # First run the common setup
    common.Setup Test Environment

    ${timestamp} =    Get Current Date    result_format=%Y%m%d%H%M%S
    ${random} =    Generate Random String    6    [NUMBERS]
    Set Suite Variable    ${UNIQUE_ID}    ${timestamp}_${random}

    # Create temp directory
    ${temp} =    Evaluate    tempfile.mkdtemp()    modules=tempfile
    Set Suite Variable    ${TEMP}    ${temp}
    Create Directory    ${TEMP}

    # Update TEST_PROJECT_DIR with unique ID
    Set Suite Variable    ${TEST_PROJECT_DIR}    ${TEMP}/test_project_${UNIQUE_ID}

    Log    Test environment created with ID: ${UNIQUE_ID}

Cleanup Test Environment
    [Documentation]    Clean up test environment
    Run Keyword If    '${TEMP}' != '${EMPTY}'    Remove Directory    ${TEMP}    recursive=True
    Remove Environment Variable    CLEVERAGENTS_TESTING_USE_MOCK_AI
    Remove Environment Variable    CLEVERAGENTS_DEFAULT_ACTOR
