import { NextResponse } from "next/server";
import { getSession } from "@/lib/session";
import { queryOne } from "@/lib/db";
import { SUPER_ADMIN } from "@/lib/constants";

export async function GET() {
  const user = await getSession();
  if (!user) {
    return NextResponse.json({ success: false }, { status: 401 });
  }
  // 특수 권한 (발주한도 무시 / 숨김품목 보기) + 기본 용차비 설정 같이 내려줌.
  // default_charter_* 컬럼이 운영DB 에 아직 없을 수 있어 try-catch 로 안전 처리.
  let perms = { unlimitedQty: false, viewHidden: false, defaultCharterUse: false, defaultCharterPrice: 0 };
  // 관리자 메뉴 토글 노출용 — "관리자 권한그룹" 멤버십 검사.
  // user_type='A' 만으로는 부족 (실무자에게 광범위하게 부여돼 있어 메뉴 토글 노출이 과함).
  // authority_master.auth_code='ADMIN' 또는 auth_name 에 '관리자' 포함 + active 상태 그룹에 소속된 경우만 true.
  // SUPER_ADMIN(plm_admin) 은 항상 통과.
  let isMasterAdmin = user.userId?.toLowerCase() === SUPER_ADMIN;
  try {
    if (!isMasterAdmin) {
      const row = await queryOne<{ N: string }>(
        `SELECT 1 AS "N"
         FROM authority_sub_user ASU
         JOIN authority_master AM ON AM.objid = ASU.master_objid
         WHERE ASU.user_id = $1
           AND COALESCE(AM.status, 'active') = 'active'
           AND (UPPER(COALESCE(AM.auth_code,'')) = 'ADMIN' OR AM.auth_name LIKE '%관리자%')
         LIMIT 1`,
        [user.userId]
      );
      isMasterAdmin = !!row;
    }
  } catch {
    // authority 테이블 미존재 등 — 폴백: SUPER_ADMIN 만 true
  }
  try {
    const row = await queryOne<{ U: string; V: string; CU: string; CP: string }>(
      `SELECT COALESCE(unlimited_qty, 'N') AS "U",
              COALESCE(view_hidden,    'N') AS "V",
              COALESCE(default_charter_use,   'N') AS "CU",
              COALESCE(default_charter_price, 0)::text AS "CP"
       FROM user_info WHERE user_id = $1`,
      [user.userId]
    );
    if (row) perms = {
      unlimitedQty: row.U === "Y",
      viewHidden: row.V === "Y",
      defaultCharterUse: row.CU === "Y",
      defaultCharterPrice: Number(row.CP) || 0,
    };
  } catch {
    // 컬럼이 없는 경우 폴백 — 기존 권한만 다시 조회
    try {
      const row = await queryOne<{ U: string; V: string }>(
        `SELECT COALESCE(unlimited_qty, 'N') AS "U", COALESCE(view_hidden, 'N') AS "V"
         FROM user_info WHERE user_id = $1`,
        [user.userId]
      );
      if (row) perms = { ...perms, unlimitedQty: row.U === "Y", viewHidden: row.V === "Y" };
    } catch { /* ignore */ }
  }
  return NextResponse.json({ success: true, user: { ...user, ...perms, isMasterAdmin } });
}
