// 세션 상태(원본 라벨) → 포털 표시 라벨 + 배지 스타일. // 원본 라벨은 apis 의 SESSION_STATUS_LABEL(협상생성/협상중/협상완료/미참여/협상거부)과 일치한다. export interface StatusMeta { display: string badge: string // 배지 배경/글자색 dot: string // 상태 점 색 } export const STATUS_META: Record = { 협상생성: { display: '협상 대기', badge: 'bg-brand-light text-brand-600', dot: 'bg-brand-600' }, 협상중: { display: '협상 중', badge: 'bg-[#FFF3E5] text-[#F5A623]', dot: 'bg-[#F5A623]' }, 협상완료: { display: '협상 완료', badge: 'bg-[#EAFDF3] text-success', dot: 'bg-success' }, 미참여: { display: '협상 미참여', badge: 'bg-neutral-20 text-neutral-60', dot: 'bg-neutral-60' }, 협상거부: { display: '협상 거절', badge: 'bg-[#FFEBEB] text-[#FF4D4F]', dot: 'bg-[#FF4D4F]' }, } export function statusMeta(label: string): StatusMeta { return STATUS_META[label] ?? { display: label || '-', badge: 'bg-neutral-20 text-neutral-60', dot: 'bg-neutral-60' } } // 종료 상태 — 대화를 이어갈 수 없고 지난 이력만 '결과 보기'로 열람한다(백엔드 send 도 협상중만 허용). const ENDED_STATUSES = ['협상완료', '미참여', '협상거부'] export function isEndedStatus(label: string): boolean { return ENDED_STATUSES.includes(label) } // 채팅 진입 가능 여부. 진행 건은 항상, 종료 건은 볼 대화가 있을 때만 — 초청만 받고 끝난 건은 열어도 빈 화면이다. export function canEnterChat(label: string, hasChat: boolean): boolean { return !isEndedStatus(label) || hasChat } // 협상 결과(SessionResult 코드) → 완료 건에 붙는 결과 배지. 0(미정)은 표시하지 않는다. // 결렬(3)은 재협상 요청 대상이라 눈에 띄게 노랑으로 둔다. export const RESULT_META: Record = { 1: { label: '낙찰', badge: 'bg-[#EAFDF3] text-success' }, 2: { label: '미낙찰', badge: 'bg-neutral-20 text-neutral-60' }, 3: { label: '결렬', badge: 'bg-[#FFF3E5] text-[#F5A623]' }, }