// 매입 발주 상태 분리 — 진행상태(status)와 결재상태(입금: paid_date) 를 별도로 관리.
//   진행상태: OPEN(작성중) → REQUESTED(발주요청) → PARTIAL(입고중) / RECEIVED(입고완료) / CANCELLED
//   결재상태: paid_date IS NOT NULL = 입금완료, NULL = 미입금  (status 와 무관)
//
// 과거에는 status='PAID' 가 진행상태를 덮어써서 입고 진행도를 알 수 없었음.
// 아래 1회성 마이그레이션으로 status='PAID' 행을 입고수량 기준 진행상태로 복원하고
// paid_date 를 보존(없으면 NOW())해 결재상태만 별도로 남긴다.
import { pool } from "./db";

let migrated = false;
export async function ensureProcPaymentSeparation() {
  if (migrated) return;
  try {
    await pool.query(`
      UPDATE momo_procurements P SET
        paid_date = COALESCE(P.paid_date, NOW()),
        status = CASE
          WHEN (SELECT COUNT(*) FROM momo_procurement_items WHERE proc_objid = P.objid) = 0 THEN 'REQUESTED'
          WHEN (SELECT COUNT(*) FROM momo_procurement_items
                 WHERE proc_objid = P.objid AND COALESCE(received_qty,0) < qty) = 0 THEN 'RECEIVED'
          WHEN (SELECT COUNT(*) FROM momo_procurement_items
                 WHERE proc_objid = P.objid AND COALESCE(received_qty,0) > 0) > 0 THEN 'PARTIAL'
          ELSE 'REQUESTED'
        END
      WHERE P.status = 'PAID'
    `);
    migrated = true;
  } catch (err) {
    console.error("[momo-proc/ensureProcPaymentSeparation]", err);
  }
}

// 결재(입금) 완료 여부 SQL 식 — paid_date 기준
export const IS_PAID_SQL = "(P.paid_date IS NOT NULL)";
