import { DomainConflictError } from '../../../common/errors/domain-conflict.error';
export type FiscalIntegrationInputRecord = Record<string, unknown>;
export function assertFiscalIntegrationInputObject(input: unknown, code: string): asserts input is FiscalIntegrationInputRecord {
if (!input || typeof input !== 'object' || Array.isArray(input)) throw new DomainConflictError(code);
}
export function assertFiscalIntegrationScope(
input: unknown,
code: string,
options: { locationRequired?: boolean } = {},
): asserts input is FiscalIntegrationInputRecord {
assertFiscalIntegrationInputObject(input, code);
assertFiscalIntegrationText(input.organizationId, 200, code);
if (options.locationRequired === false) {
if (input.locationId !== undefined && input.locationId !== null) assertFiscalIntegrationText(input.locationId, 200, code);
} else {
assertFiscalIntegrationText(input.locationId, 200, code);
}
}
export function assertFiscalIntegrationText(value: unknown, max: number, code: string): asserts value is string {
if (typeof value !== 'string' || value.trim().length === 0 || value.length > max) {
throw new DomainConflictError(code);
}
}
export function assertOptionalFiscalIntegrationText(value: unknown, max: number, code: string): void {
if (value !== undefined && value !== null) assertFiscalIntegrationText(value, max, code);
}
export function assertFiscalIntegrationRecord(value: unknown, code: string): asserts value is Record<string, unknown> {
if (!value || typeof value !== 'object' || Array.isArray(value)) throw new DomainConflictError(code);
}
export function assertFiscalIntegrationEnum(value: unknown, allowed: readonly string[], code: string): void {
if (typeof value !== 'string' || !allowed.includes(value)) throw new DomainConflictError(code);
}
export function normalizeFiscalEnvironment(value: unknown, code: string): 'sandbox'|'production' {
const normalized = value === 'test' ? 'sandbox' : value ?? 'sandbox';
assertFiscalIntegrationEnum(normalized, ['sandbox', 'production'], code);
return normalized as 'sandbox'|'production';
}
