export const ADMIN_SUCCESS = { code: '0000', message: 'OK' };
/**
 * 각 기능에 따른 코드 앞에 두자리
 * 관리자 (01)
 * 기업 (02)
 * FC (03)
 * 인증 (06)
 * 엑셀 (08)
 * 청구서 (09)
 */
export const INVALID_ACCOUNT_ID = { code: 'E0101', message: '아이디 또는 비밀번호를 확인해주세요.' };

// 관리자 (01)
export const NOT_FOUND_ADMIN = { code: 'E0101', message: '존재하지 않는 관리자입니다.' }

// 기업 (02)
export const CONTRACT_DATE_VALIDATION = { code: 'E0201', message: '계약시작일은 계약종료일보다 클 수 없습니다.' }
export const CONTRACT_DATE_DUPLICATE = { code: 'E0202', message: '중복되는 계약이 존재합니다.' }
export const NOT_ACTIVE_AGENCY = { code: 'E0203', message: '계약중이지 않은 기업입니다.' }
export const NOT_FOUND_AGENCY = { code: 'E0204', message: '존재하지 않는 기업입니다.' }
export const CONTRACT_SUBSCRIPTION_USE = { code: 'E0205', message: '구독중인 회원이 있어 삭제할 수 없습니다. (계약코드: #계약코드)' }
export const INVALID_NEXT_PAY_DAY = { code: 'E0206', messsage: '다음구독예정일은 오늘 이후의 날짜부터 가능합니다.' }
export const DELIQUENT_AGENCY_MEMBER = { code: 'E0207', message: '해당 기업은 불량기업이여서 로그인이 불가능합니다.' };

// FC (03)
export const INVALID_LOGIN_ID_FORMAT = { code: 'E0301', message: '로그인아이디 형식이 올바르지 않습니다.'}
export const INVALID_PASSWORD_FORMAT = { code: 'E0302', message: '비밀번호 형식이 올바르지 않습니다.'}

// 광고 (07)
export const NOT_FOUND_MONTH = { code: 'E0701', message: '월에 대한 데이터가 없습니다.' };

// 엑셀 (08)
export const UPLOAD_DATA_NOT_FOUND = { code: 'E0801', message: '업로드 데이터 없음'}
export const DUPLICATE_UPLOAD_FILE_NAME_FOUND = { code: 'E0802', message: '파일 내 중복값 발견 (중복값: #중복코드 #길이)'}
export const NOT_FOUND_REQUIRED_PARAMETER = { code: 'E0803', message: '필수값 누락' };
export const NOT_FOUND_FILE = { code: 'E0804', message: '파일 누락' };
export const FAILED_UPLOAD = { code: 'E0805', message: '업로드 실패'}
export const NOT_FOUND_RECOVERY_DATA = { code: 'E0806', message: '복구할 데이터 없음'}
export const DUPLICATE_LOGINID_IN_AGENCY = { code: 'E0807', message: '이미 등록된 계정이 존재합니다. (로그인 ID: #계정 #길이)'}
export const DUPLICATE_PHONE_IN_AGENCY = { code: 'E0808', message: '이미 등록된 계정이 존재합니다. (전화번호: #계정 #길이)'}
export const DUPLICATE_EMAIL_IN_AGENCY = { code: 'E0809', message: '이미 등록된 계정이 존재합니다. (이메일: #계정 #길이)'}
export const INVALID_LOGIN_ID_FORMAT_IN_EXCEL = { code: 'E0810', message: '올바르지 않은 형식의 값이 존재합니다. (로그인아이디: #입력값 #길이)'}
export const INVALID_PASSWORD_FORMAT_IN_EXCEL = { code: 'E0811', message: '올바르지 않은 형식의 값이 존재합니다. (비밀번호: #입력값 #길이)'}
export const INVALID_PHONE_FORMAT_IN_EXCEL = { code: 'E0812', message: '올바르지 않은 형식의 값이 존재합니다. (전화번호: #입력값 #길이)'}
export const INVALID_EMAIL_FORMAT_IN_EXCEL = { code: 'E0813', message: '올바르지 않은 형식의 값이 존재합니다. (이메일: #입력값 #길이)'}
export const INVALID_FORMAT = { code: 'E0814', message: '올바르지 않은 형식의 값이 존재합니다.'}
export const NOT_FOUND_FC_IN_SUBSCRIBE = { code: 'E0815', message: '등록되지 않은 계정이 존재합니다. (로그인 ID: #계정 #길이)'}
// 삼성화재 계정 인테이크 — 암호 걸린 요청 파일. 치환할 값이 없어 자리표시자를 쓰지 않는다.
export const INTAKE_FILE_PASSWORD_REQUIRED = { code: 'E0816', message: '암호가 걸린 파일입니다. 파일 암호를 입력해주세요.' };
export const INTAKE_FILE_PASSWORD_MISMATCH = { code: 'E0817', message: '파일 암호가 맞지 않습니다.' };
export const INTAKE_FILE_UNSUPPORTED_ENCRYPTION = { code: 'E0818', message: '지원하지 않는 방식으로 암호화된 파일입니다.' };
export const INTAKE_FILE_UNREADABLE = { code: 'E0819', message: '파일을 읽을 수 없습니다. 시트가 하나뿐인 xlsx 파일이 맞는지 확인해주세요.' };
//* 삼성화재 계정 인테이크 확정(마일스톤 5). 확인·진행 표시는 인가가 아니라 실수 방지다 — 채우는 주체는 이미
//*   allowlist 인가를 통과한 관리자이고, 서버 강제가 막는 것은 화면 잠금이 회귀했거나 화면 밖에서 부른 확정이다.
export const INTAKE_MISMATCH_UNACKNOWLEDGED = { code: 'E0820', message: '기업 선택 의심이 확인되지 않았습니다. 대상 기업을 확인한 뒤 다시 시도해주세요.' };
export const INTAKE_CONFIRM_IN_PROGRESS = { code: 'E0821', message: '같은 기업의 확정이 진행 중입니다. 끝난 뒤 다시 시도해주세요.' };
export const INTAKE_FORMAT_UNACKNOWLEDGED = { code: 'E0822', message: '파일 양식 의심이 확인되지 않았습니다. 요청 종류와 파일을 확인한 뒤 다시 시도해주세요.' };
export const INTAKE_LAYOUT_INVALID = { code: 'E0823', message: '열 배치가 올바르지 않습니다. 열 쓰임을 다시 맞춰 주세요.' };
export const INTAKE_ROW_EDITS_INVALID = { code: 'E0824', message: '화면에서 고친 행 정보가 올바르지 않습니다. 판정을 다시 불러와 주세요.' };
export const INTAKE_PASTE_TOO_LARGE = { code: 'E0825', message: '붙여 넣은 표가 너무 큽니다. 메일 본문의 계정 표만 선택해 다시 붙여 넣어 주세요.' };
export const INTAKE_ORG_INVALID = { code: 'E0826', message: '관할 조직이 선택한 기업의 사용 중인 조직이 아닙니다.' };
export const SUPER_ADMIN_PROTECTED = { code: 'E0827', message: '최고관리자 계정은 최고관리자만 수정·삭제할 수 있습니다.' };
//* 지정 행은 누구도 지우지 못한다 — 공용 계정 1개라 "최고관리자만 지운다" 는 곧 "자기를 지운다" 이고,
//*   그러면 지정을 되살릴 화면 경로가 없다(기동 seed 는 계정이 사라진 뒤 target-absent 로 멈춘다).
export const SUPER_ADMIN_UNDELETABLE = { code: 'E0828', message: '최고관리자 계정은 삭제할 수 없습니다.' };

// 청구서 (09)
export const DUPLICATE_INVOICE = { code: 'E0901', message: '이미 존재하는 청구서 입니다.'}

// 영업대리점(10)
export const CONTRACT_CHANNEL_USE = { code: 'E1001', message: '해당 채널을 통해 가입된 회원이 있어 삭제할 수 없습니다. (채널코드: #채널코드)' }
export const CONTRACT_SALES_USE = { code: 'E1002', message: '해당 영업대리점을 통해 가입된 기업이 있어 삭제할 수 없습니다.' };

// 공통(09)
export const DUPLICATE_DATA = { code: 'E0901', message: '중복된 값이 존재합니다.'}
export const UNAUTHORIZED = { code: 'E0601', message: '인증정보가 유효하지 않습니다.' }

// 기업조직/계약 1:N 신규 (task-688)
//* 사전 확정 설계 계약 기준 — 동일 코드가 기존 다른 곳에서 사용 중일 수 있으나, 호출 컨텍스트(조직/계약/회원) 분리로 충돌 없음.
export const INVALID_PARAMETER = { code: 'E0001', message: '필수값이 누락되었거나 형식이 올바르지 않습니다.' };
export const DUPLICATE_CONTRACT_PER_ORG = { code: 'E0202', message: '동일 조직 내 활성 계약이 이미 존재합니다.' };
export const ORG_NOT_FOUND = { code: 'E0301', message: '존재하지 않는 조직입니다.' };
export const ORG_AGENCY_MISMATCH = { code: 'E0302', message: '해당 조직은 지정한 기업 소속이 아닙니다.' };
export const MEMBER_ORG_REQUIRED = { code: 'E0303', message: '회원의 소속 조직(orgId)이 지정되지 않았습니다.' };
export const ORG_HAS_ACTIVE_MEMBERS = { code: 'E0304', message: '조직에 활성 회원이 존재하여 삭제할 수 없습니다.' };
export const ORG_HAS_ACTIVE_CONTRACTS = { code: 'E0305', message: '조직에 활성 계약이 존재하여 삭제할 수 없습니다.' };
export const PRODUCT_NOT_FOUND_OR_INACTIVE = { code: 'E0306', message: '존재하지 않거나 비활성 상태의 상품입니다.' };
export const CONTRACT_NOT_FOUND = { code: 'E0307', message: '존재하지 않는 계약입니다.' };
export const DUPLICATE_MEMBER_EMAIL = { code: 'E0308', message: '이미 등록된 이메일입니다.' };
export const CROSS_AGENCY_MOVE_FORBIDDEN = { code: 'E0309', message: '다른 기업의 조직으로 이동할 수 없습니다.' };
export const DUPLICATE_ORG_NAME = { code: 'E0310', message: '동일 기업 내 동일 이름의 조직이 이미 존재합니다.' };
//* 조직트리 이동 순환 차단(task: 조직트리 관리) — 자기 자신/자기 하위로 이동 금지.
export const ORG_CIRCULAR_MOVE = { code: 'E0311', message: '조직을 자기 자신 또는 하위 조직으로 이동할 수 없습니다.' };
//* 회원 소속 일괄배정/조직관리자 지정 — 대상 회원 없음/기업 불일치.
export const MEMBER_NOT_FOUND = { code: 'E0312', message: '대상 회원을 찾을 수 없습니다.' };
export const MEMBER_AGENCY_MISMATCH = { code: 'E0313', message: '대상 회원이 조직과 동일한 기업 소속이 아닙니다.' };
export const CORP_FORBIDDEN = { code: 'E0401', message: '기업 권한이 없습니다.' };

// 기업계약 구독계정수(seat) 하한 판정 (후불정산·기업계약 변경안 3-4)
//* 프론트는 code 문자열과 data.{current,after,seat}를 그대로 읽는다 — 계약 유지 필수.
export const SEAT_BELOW_CONTRACT = {
  code: 'SEAT_BELOW_CONTRACT',
  message:
    '계약 구독계정수 하한 미만으로는 처리할 수 없습니다. 내부 관리자에게 요청해주세요.',
};
export const SEAT_BELOW_CONTRACT_WARN = {
  code: 'SEAT_BELOW_CONTRACT_WARN',
  message: '처리 후 활성 구독계정수가 계약 구독계정수 하한 미만이 됩니다.',
};


