#!/bin/sh /etc/rc.common

START=93
USE_PROCD=1

get_config() {
	config_get_bool enabled $1 enabled 1
	config_get data_dir $1 data_dir ""
	config_get port $1 port "8197"
	config_get auth_mode $1 auth_mode "openwrt_luci"
}

start_kai_bin(){
	procd_open_instance kai_bin
	procd_set_param env KAI_AUTH_MODE="$auth_mode"
	procd_set_param command /usr/sbin/kai_bin -a 0.0.0.0 -p "$port"
	procd_set_param stderr 1
	procd_set_param respawn 3600 5 5
	procd_close_instance
}
mkdir_cwd(){
	[ -d "$1" ] || mkdir -p "$1"
}
start_kai_session(){
	procd_open_instance kai_session
	local root="${data_dir}"
	local cwd="${data_dir}/cwd"
	local agent_root="/usr/share/kai/agent"
	if [ ! -f "${agent_root}/opencode.json" ] || [ ! -d "${agent_root}/skills" ]; then
		logger -t kai "local OpenCode Agent bundle is missing under ${agent_root}"
		return 1
	fi
	procd_set_param env \
		OPENCODE_CONFIG="${agent_root}/opencode.json" \
		KAIPLUS_SKILLS_DIR="${agent_root}/skills" \
		ISTORE_AI_HELPER_BASE="http://127.0.0.1:${port}" \
		XDG_CACHE_HOME="${root}/cache" \
		XDG_DATA_HOME="${root}/data" \
		XDG_CONFIG_HOME="${root}/config" \
		XDG_STATE_HOME="${root}/state"
	procd_set_param command /usr/libexec/kai-session-launch "${cwd}"
	procd_set_param file "${agent_root}/opencode.json" "${agent_root}/manifest.json"
	procd_set_param stderr 1
	procd_set_param respawn 3600 5 5
	procd_close_instance
}
start_service() { 
	config_load kai
	config_foreach get_config kai
	if [ "$enabled" != 1 ]; then 
        return 1
    fi 
	if [ -z "${data_dir}" ]; then
		logger -t kai "data_dir is empty; please set option data_dir in /etc/config/kai"
		return 1
	fi
	logger -t kai "Starting KAI Service"
	mkdir_cwd "${data_dir}"
	mkdir_cwd "${data_dir}/cwd"
	mkdir_cwd "${data_dir}/cache"
	mkdir_cwd "${data_dir}/data"
	mkdir_cwd "${data_dir}/config"
	mkdir_cwd "${data_dir}/state"
	start_kai_session || return 1
	start_kai_bin
	logger -t kai "Starting KAI Service Completed"
}

service_triggers() {
	procd_add_reload_trigger "kai"
}
