import type { CompanyState, RequirementContract } from '../../features/company';
import { listActiveAgentsByCategory } from '../../features/company';

/**
 * Intent Alignment 흐름의 *pure 라우팅 결정*. webview 송신 / state mutation 은
 * provider 가 책임 — 이 모듈은 입력 → 결정 boolean / list 반환만.
 *
 *   - shouldAutoProceedAlignment(mode, contract, reachedLimit)
 *     → smart 모드일 때 사용자 확인 카드 skip 하고 곧장 pipeline 갈지 결정.
 *   - extractActiveRoleCategories(state)
 *     → 활성 에이전트가 있는 직군 enum 목록 (analyzer 가 회사 capability 알아야 함).
 */

/**
 * 자동 진행 2 가지 조건 (smart 한정 — strict 는 항상 사용자 확인):
 *   (a) high confidence + openQuestions 0 → 명백히 충분한 alignment
 *   (b) round limit 도달 + medium 이상 confidence → 더 물어봐도 효용 없음, friction 최소
 * (b) 케이스에서 confidence='low' 면 여전히 confirm 카드 (사용자 결정 요청).
 */
export function shouldAutoProceedAlignment(
    mode: 'smart' | 'strict',
    contract: RequirementContract,
    reachedLimit: boolean,
): boolean {
    if (mode !== 'smart') return false;
    if (contract.confidence === 'high' && contract.openQuestions.length === 0) return true;
    if (reachedLimit && (contract.confidence === 'high' || contract.confidence === 'medium')) return true;
    return false;
}

/**
 * 활성 에이전트가 한 명이라도 있는 직군 (role category) 의 enum key 목록.
 * analyzer 가 "이 회사가 어떤 일을 할 수 있나" 알아야 goal/format 을 그 capability
 * 에 맞춰 추출할 수 있다.
 */
export function extractActiveRoleCategories(state: CompanyState): string[] {
    const byCat = listActiveAgentsByCategory(state);
    return Object.entries(byCat)
        .filter(([, list]) => list.length > 0)
        .map(([cat]) => cat);
}
