import CfExceptionHandler from "../../core/CfExceptionHandler";
import {checkObjectFieldEmptyiness, isISOLocal} from "../../utils";
import {injectCatalog} from "../../core/injector";
import {AmbulanceCatalog, EmergencyMgmtCatalogType, EROCatalog} from "./typings";

export async function validateAndSaveEROCatalog(eroId: string, properties: EROCatalog) {

    if (!eroId) {
        new CfExceptionHandler().throwAndLogError(
            "ERO catalog",
            "invalid ERO catalog id"
        );
    } else if (!properties.status) {
        new CfExceptionHandler().throwAndLogError(
            "ERO catalog",
            "invalid ERO catalog status"
        );
    } else if (
        properties.joining_date &&
        !isISOLocal(properties.joining_date)
    ) {
        new CfExceptionHandler().throwAndLogError(
            "ERO catalog",
            "Invalid ambulance gps_datetime: should be in ISO8601 format e.g. 1937-01-01T12:00:27.87+02:00"
        );
    } else if (
        properties.supervisor_id_list &&
        properties.supervisor_id_list.some((item) => item.trim() === "")
    ) {
        new CfExceptionHandler().throwAndLogError(
            "ERO catalog",
            "invalid ERO catalog supervisor_id_list provided"
        );
    }
    checkObjectFieldEmptyiness(properties, [
        "supervisor_id_list",
        "site_id_list",
    ]);

    injectCatalog(eroId, EmergencyMgmtCatalogType.ERO, properties);
}

export async function validateAndSaveAmbulanceCatalog(ambulanceId: string, properties: AmbulanceCatalog) {
    if (!ambulanceId) {
        new CfExceptionHandler().throwAndLogError(
            "Ambulance catalog",
            "invalid Ambulance catalog id"
        );
    } else if (!properties.type) {
        new CfExceptionHandler().throwAndLogError(
            "Ambulance catalog",
            "invalid Ambulance catalog type"
        );
    }
    checkObjectFieldEmptyiness(properties, ["type"]);
    injectCatalog(ambulanceId, EmergencyMgmtCatalogType.Ambulance, properties);
}
