#include "agent_navigator.h"
#include "approval_control.h"
#include "ui_state.h"
#include <cassert>
#include <cstdio>
using namespace wearable;
int main() {
    static_assert(sizeof(AgentNavigator)<32000);
    AgentNavigator nav;nav.page=AgentNavigator::Page::Sessions;nav.create=true;
    assert(nav.next() && nav.index==0); // Empty catalog still offers New Session.
    nav.count=4;nav.next_cursor=4;nav.index=3;
    nav.next();assert(nav.index==4);nav.next();assert(nav.index==5);nav.next();assert(nav.index==0);
    nav.page=AgentNavigator::Page::NativeInput;nav.option_count=3;nav.free_text=true;nav.index=2;
    nav.next();assert(nav.index==3);nav.next();assert(nav.index==0);
    UiState ui;ui.agent_capabilities(true,true,true);ui.open_settings();ui.menu=Menu::Agent;
    assert(ui.items()==7 && std::string(ui.agent_label(ui.agent_actions[0]))=="Session");
    ui.index=4;assert(ui.settings_click(false)==UiEffect::None && ui.field==Field::VoiceSend);
    ui.settings_click(true);assert(ui.draft.voice_send_mode==VoiceSendMode::Direct);
    ui.settings_back();assert(ui.preferences.voice_send_mode==VoiceSendMode::Confirm);
    ui.agent_capabilities(false,false,false);assert(ui.agent_count==4);
    ApprovalControl approval;ApprovalView view{"native","codex","Question","Detail",0};
    view.choices={"accept","acceptForSession","decline","cancel"};view.choice_count=4;
    assert(approval.receive(view,0));auto generation=approval.generation;
    assert(approval.release(true,generation,1).id.empty() && approval.choice_index==1);
    auto action=approval.release(false,generation,2);assert(action.decision=="acceptForSession");
    assert(approval.release(false,generation,3).id.empty());
    assert(std::string(native_decision_label("accept"))=="Approve once");
    assert(std::string(native_decision_label("acceptForSession"))=="Approve for session");
    approval.disconnect();view.choice_count=2;assert(approval.receive(view,5));
    action=approval.release(false,approval.generation,6);assert(action.decision=="acceptForSession");
    std::puts("Bounded Navigator paging/empty creation/capabilities/native choice semantics PASS");
}
