import { BadRequestException } from "@nestjs/common"; import { BlameRequestType } from "src/Types&Enums/blame-request-management/blameRequestType.enum"; import { parseFanavaranId } from "src/lookups/fanavaran-last-car-policy"; export type FileMakerFanavaranExpertCodes = { ThirdPartyClaimExpertId?: string; CarBodyClaimExpertId?: string; }; export type FileReviewerFanavaranExpertCodes = { ThirdPartyExpertiseClaim?: string; CarBodyExpertiseClaim?: string; }; export function parseFanavaranExpertId(raw?: string | null): number | null { if (raw == null) return null; const trimmed = String(raw).trim(); if (!trimmed) return null; return parseFanavaranId(trimmed) ?? parseFanavaranId(Number(trimmed)); } export function fileMakerStageOneExpertCode( fileMaker: FileMakerFanavaranExpertCodes, blameType: BlameRequestType, ): string | undefined { return blameType === BlameRequestType.CAR_BODY ? fileMaker.CarBodyClaimExpertId : fileMaker.ThirdPartyClaimExpertId; } export function fileReviewerExpertiseExpertCode( fileReviewer: FileReviewerFanavaranExpertCodes, blameType: BlameRequestType, ): string | undefined { return blameType === BlameRequestType.CAR_BODY ? fileReviewer.CarBodyExpertiseClaim : fileReviewer.ThirdPartyExpertiseClaim; } function blameTypeLabel(blameType: BlameRequestType): string { return blameType === BlameRequestType.CAR_BODY ? "car body (بدنه)" : "third party (ثالث)"; } export function assertFileMakerCanCreateBlameType( fileMaker: FileMakerFanavaranExpertCodes, blameType: BlameRequestType, ): void { const raw = fileMakerStageOneExpertCode(fileMaker, blameType); if (parseFanavaranExpertId(raw) != null) { return; } throw new BadRequestException({ code: "FILE_MAKER_FANAVARAN_EXPERT_CODE_MISSING", message: `Your FileMaker profile has no Fanavaran stage-1 claim expert id for ${blameTypeLabel(blameType)} files. You cannot create this file type.`, }); } export function assertFileReviewerCanReviewBlameType( fileReviewer: FileReviewerFanavaranExpertCodes, blameType: BlameRequestType, ): void { const raw = fileReviewerExpertiseExpertCode(fileReviewer, blameType); if (parseFanavaranExpertId(raw) != null) { return; } throw new BadRequestException({ code: "FILE_REVIEWER_FANAVARAN_EXPERT_CODE_MISSING", message: `Your FileReviewer profile has no Fanavaran expertise claim expert id for ${blameTypeLabel(blameType)} files. You cannot review this file type.`, }); } export function resolveFileMakerStageOneExpertId( fileMaker: FileMakerFanavaranExpertCodes, blameType: BlameRequestType, ): number | null { return parseFanavaranExpertId( fileMakerStageOneExpertCode(fileMaker, blameType), ); } export function resolveFileReviewerExpertiseExpertId( fileReviewer: FileReviewerFanavaranExpertCodes, blameType: BlameRequestType, ): number | null { return parseFanavaranExpertId( fileReviewerExpertiseExpertCode(fileReviewer, blameType), ); }