//* 관리자 열람(admin-view iframe) — 회원 소유자 검증의 대체 통과 경로 판정.
//*
//* 배경(2026-07): 소유자 검증(fix/security 커밋들)이 회원 JWT 기준이라, 회원 JWT가 없는
//*  관리자 분석 팝업(iframe)의 병력분석 진료로그·추천보험·투약/검사 추천 조회가 403으로
//*  차단됐다. admin JWT(_aaT 쿠키, SameSite=None이라 iframe XHR에도 실림)가 함께 온
//*  요청은 관리자 권한으로 대신 검증한다. (AdminOptionalGuard가 req['admin']을 복원)

export type AdminViewer = {
  role?: string;
  admId?: number;
  agcId?: number;
  //* AdminOptionalGuard가 admin-view 단명 토큰(scope 'analyze' + oddId) 검증에 성공하면 세팅.
  //*  쿠키(_aaT)가 iframe 요청에 실리지 않는 환경(로컬 admin ↔ stg 사이트 등)의 대체 경로.
  viewTokenOddId?: number;
};

/**
 * 통합관리자(admin)는 전체 열람(기존 admin-view 정책과 동일),
 * 기업/조직관리자(corp)는 자기 기업(agcId) 소속 건만 열람.
 * admin-view 단명 토큰이 해당 oddId로 검증된 요청은 역할 무관 통과 —
 * 발급 시점에 관리자 인증(AdminJwtAuthGuard) + corp 기업 스코프(isOddInCorpScope)가 이미 검증됨.
 * 영업대리점(sales) 등 그 외 역할은 통과시키지 않는다.
 */
export function isAdminViewerAllowed(
  admin: AdminViewer | null | undefined,
  ownerAgcId: number | null | undefined,
  oddId?: number,
): boolean {
  if (!admin) return false;
  if (
    admin.viewTokenOddId != null &&
    oddId != null &&
    Number(admin.viewTokenOddId) === Number(oddId)
  ) {
    return true;
  }
  if (!admin.role) return false;
  if (admin.role === 'admin') return true;
  if (admin.role === 'corp') {
    return ownerAgcId != null && Number(ownerAgcId) === Number(admin.agcId);
  }
  return false;
}
