import { join, resolve } from 'path';

//* configuration.ts 를 고치지 않고 이 모듈이 process.env 를 직접 읽는다(loss-analysis 의 LOSS_ANALYSIS_ENABLED 선례).
//* 매 호출 읽는다 — 시험이 env 를 바꿔 끼울 수 있게.
const positive = (value: string | undefined, fallback: number) =>
  Number(value) > 0 ? Number(value) : fallback;

export function caseReportConfig() {
  const env = process.env;
  const dir = env.CASE_REPORT_DIR || null;
  return {
    enabled: env.CASE_REPORT_ENABLED === '1',
    dir,
    python: env.CASE_REPORT_PYTHON || 'python3',
    workerDir:
      env.CASE_REPORT_WORKER_DIR ||
      resolve(process.cwd(), 'workers/case-report'),
    extractTimeoutMs: positive(env.CASE_REPORT_EXTRACT_TIMEOUT_MS, 1_800_000),
    analyzeTimeoutMs: positive(env.CASE_REPORT_ANALYZE_TIMEOUT_MS, 120_000),
    maxFileMb: positive(env.CASE_REPORT_MAX_FILE_MB, 30),
    maxFilesPerJob: positive(env.CASE_REPORT_MAX_FILES_PER_JOB, 40),
    maxPages: positive(env.CASE_REPORT_MAX_PAGES, 60),
    //* 약관은 텍스트 레이어만 읽어(OCR 없음) 쪽 수 한도를 따로 둔다. 2214쪽 통합약관 실측(pdftotext 약 33초, 판독 한도 120초) 기준
    maxPagesPolicy: positive(env.CASE_REPORT_MAX_PAGES_POLICY, 2500),
    //* 개발 전용 공유 캐시. 주면 작업 삭제·원본 삭제가 캐시를 지우지 못한다(명세 3.3 절)
    ocrCacheDir: env.CASE_REPORT_OCR_CACHE_DIR || null,
    //* AI 읽기(intake)는 기본은 끈다. 켜도 워커가 정밀 파서 없는 20쪽 이하 서류(알 수 없는 문서 · 범용 판독 지급내역)에서만 부른다
    llmMode: env.CASE_REPORT_LLM_MODE === 'intake' ? 'intake' : 'off',
    llmFileUsd: positive(env.CASE_REPORT_LLM_FILE_USD, 0.5),
    llmDailyUsd: positive(env.CASE_REPORT_LLM_DAILY_USD, 10),
    //* 날짜별 원장에서 하루 상한을 센다. 기본은 저장소 디렉터리 아래(없으면 끈 것과 같다)
    llmLedgerDir:
      env.CASE_REPORT_LLM_LEDGER_DIR || (dir ? join(dir, 'llm-ledger') : null),
  };
}

export type CaseReportConfig = ReturnType<typeof caseReportConfig>;

export const LINK_MAX_FILES = 20;
export const UPLOAD_MAX_PER_REQUEST = 10;
