/**
 * ============================================================
 * Astra Path Resolver (경로 해결기)
 *
 * Astra의 모든 데이터 파일(.astra 디렉토리)의 경로를 중앙에서 관리합니다.
 * 확장 프로그램의 설치 경로(extensionUri) 기반으로 .astra 디렉토리를 해결하여,
 * 사용자 프로젝트 루트가 아닌 ConnectAI 패키지 내부에 데이터를 저장합니다.
 *
 * 이 모듈은 AAL(Astra Autonomous Loop) 프로토콜의 기반이 됩니다.
 * ============================================================
 */

import * as fs from 'fs';
import * as path from 'path';
import * as vscode from 'vscode';

let _extensionRootPath: string | null = null;

/**
 * 확장 프로그램 활성화 시 1회 호출하여 extension root를 설정합니다.
 * extension.ts의 activate()에서 호출되어야 합니다.
 */
export function initAstraPathResolver(context: vscode.ExtensionContext): void {
    _extensionRootPath = context.extensionUri.fsPath;
}

/**
 * .astra 데이터 디렉토리의 절대 경로를 반환합니다.
 * 디렉토리가 없으면 자동 생성합니다.
 *
 * @returns ConnectAI/.astra/ 의 절대 경로
 */
export function getAstraDataDir(): string {
    const root = _extensionRootPath ?? _fallbackExtensionRoot();
    const astraDir = path.join(root, '.astra');
    if (!fs.existsSync(astraDir)) {
        fs.mkdirSync(astraDir, { recursive: true });
    }
    return astraDir;
}


/**
 * extensionUri가 아직 설정되지 않은 경우의 fallback.
 * __dirname 기반으로 ConnectAI 루트를 추정합니다.
 */
function _fallbackExtensionRoot(): string {
    // esbuild로 번들된 out/extension.js → 상위 디렉토리가 ConnectAI 루트
    return path.resolve(__dirname, '..');
}
