import * as configFunctions from './functions.config.js';
import { getLotOccupantTypes as getLotOccupantTypesFromDatabase } from './lotOccupancyDB/getLotOccupantTypes.js';
import { getLotStatuses as getLotStatusesFromDatabase } from './lotOccupancyDB/getLotStatuses.js';
import { getLotTypes as getLotTypesFromDatabase } from './lotOccupancyDB/getLotTypes.js';
import { getOccupancyTypes as getOccupancyTypesFromDatabase } from './lotOccupancyDB/getOccupancyTypes.js';
import { getOccupancyTypeFields as getOccupancyTypeFieldsFromDatabase } from './lotOccupancyDB/getOccupancyTypeFields.js';
import { getWorkOrderTypes as getWorkOrderTypesFromDatabase } from './lotOccupancyDB/getWorkOrderTypes.js';
import { getWorkOrderMilestoneTypes as getWorkOrderMilestoneTypesFromDatabase } from './lotOccupancyDB/getWorkOrderMilestoneTypes.js';
let lotOccupantTypes;
export function getLotOccupantTypes() {
    if (!lotOccupantTypes) {
        lotOccupantTypes = getLotOccupantTypesFromDatabase();
    }
    return lotOccupantTypes;
}
export function getLotOccupantTypeById(lotOccupantTypeId) {
    const cachedLotOccupantTypes = getLotOccupantTypes();
    return cachedLotOccupantTypes.find((currentLotOccupantType) => {
        return currentLotOccupantType.lotOccupantTypeId === lotOccupantTypeId;
    });
}
export function getLotOccupantTypeByLotOccupantType(lotOccupantType) {
    const cachedLotOccupantTypes = getLotOccupantTypes();
    const lotOccupantTypeLowerCase = lotOccupantType.toLowerCase();
    return cachedLotOccupantTypes.find((currentLotOccupantType) => {
        return (currentLotOccupantType.lotOccupantType.toLowerCase() ===
            lotOccupantTypeLowerCase);
    });
}
function clearLotOccupantTypesCache() {
    lotOccupantTypes = undefined;
}
let lotStatuses;
export function getLotStatuses() {
    if (!lotStatuses) {
        lotStatuses = getLotStatusesFromDatabase();
    }
    return lotStatuses;
}
export function getLotStatusById(lotStatusId) {
    const cachedLotStatuses = getLotStatuses();
    return cachedLotStatuses.find((currentLotStatus) => {
        return currentLotStatus.lotStatusId === lotStatusId;
    });
}
export function getLotStatusByLotStatus(lotStatus) {
    const cachedLotStatuses = getLotStatuses();
    const lotStatusLowerCase = lotStatus.toLowerCase();
    return cachedLotStatuses.find((currentLotStatus) => {
        return currentLotStatus.lotStatus.toLowerCase() === lotStatusLowerCase;
    });
}
function clearLotStatusesCache() {
    lotStatuses = undefined;
}
let lotTypes;
export function getLotTypes() {
    if (!lotTypes) {
        lotTypes = getLotTypesFromDatabase();
    }
    return lotTypes;
}
export function getLotTypeById(lotTypeId) {
    const cachedLotTypes = getLotTypes();
    return cachedLotTypes.find((currentLotType) => {
        return currentLotType.lotTypeId === lotTypeId;
    });
}
export function getLotTypesByLotType(lotType) {
    const cachedLotTypes = getLotTypes();
    const lotTypeLowerCase = lotType.toLowerCase();
    return cachedLotTypes.find((currentLotType) => {
        return currentLotType.lotType.toLowerCase() === lotTypeLowerCase;
    });
}
function clearLotTypesCache() {
    lotTypes = undefined;
}
let occupancyTypes;
let allOccupancyTypeFields;
export function getOccupancyTypes() {
    if (!occupancyTypes) {
        occupancyTypes = getOccupancyTypesFromDatabase();
    }
    return occupancyTypes;
}
export function getAllOccupancyTypeFields() {
    if (!allOccupancyTypeFields) {
        allOccupancyTypeFields = getOccupancyTypeFieldsFromDatabase();
    }
    return allOccupancyTypeFields;
}
export function getOccupancyTypeById(occupancyTypeId) {
    const cachedOccupancyTypes = getOccupancyTypes();
    return cachedOccupancyTypes.find((currentOccupancyType) => {
        return currentOccupancyType.occupancyTypeId === occupancyTypeId;
    });
}
export function getOccupancyTypeByOccupancyType(occupancyTypeString) {
    const cachedOccupancyTypes = getOccupancyTypes();
    const occupancyTypeLowerCase = occupancyTypeString.toLowerCase();
    return cachedOccupancyTypes.find((currentOccupancyType) => {
        return (currentOccupancyType.occupancyType.toLowerCase() ===
            occupancyTypeLowerCase);
    });
}
export function getOccupancyTypePrintsById(occupancyTypeId) {
    const occupancyType = getOccupancyTypeById(occupancyTypeId);
    if (!occupancyType ||
        (occupancyType.occupancyTypePrints ?? []).length === 0) {
        return [];
    }
    if (occupancyType.occupancyTypePrints.includes('*')) {
        return configFunctions.getProperty('settings.lotOccupancy.prints');
    }
    return occupancyType.occupancyTypePrints;
}
function clearOccupancyTypesCache() {
    occupancyTypes = undefined;
    allOccupancyTypeFields = undefined;
}
let workOrderTypes;
export function getWorkOrderTypes() {
    if (!workOrderTypes) {
        workOrderTypes = getWorkOrderTypesFromDatabase();
    }
    return workOrderTypes;
}
export function getWorkOrderTypeById(workOrderTypeId) {
    const cachedWorkOrderTypes = getWorkOrderTypes();
    return cachedWorkOrderTypes.find((currentWorkOrderType) => {
        return currentWorkOrderType.workOrderTypeId === workOrderTypeId;
    });
}
function clearWorkOrderTypesCache() {
    workOrderTypes = undefined;
}
let workOrderMilestoneTypes;
export function getWorkOrderMilestoneTypes() {
    if (!workOrderMilestoneTypes) {
        workOrderMilestoneTypes = getWorkOrderMilestoneTypesFromDatabase();
    }
    return workOrderMilestoneTypes;
}
export function getWorkOrderMilestoneTypeByWorkOrderMilestoneTypeId(workOrderMilestoneTypeId) {
    const cachedWorkOrderMilestoneTypes = getWorkOrderMilestoneTypes();
    return cachedWorkOrderMilestoneTypes.find((currentWorkOrderMilestoneType) => {
        return (currentWorkOrderMilestoneType.workOrderMilestoneTypeId ===
            workOrderMilestoneTypeId);
    });
}
export function getWorkOrderMilestoneTypeByWorkOrderMilestoneType(workOrderMilestoneTypeString) {
    const cachedWorkOrderMilestoneTypes = getWorkOrderMilestoneTypes();
    const workOrderMilestoneTypeLowerCase = workOrderMilestoneTypeString.toLowerCase();
    return cachedWorkOrderMilestoneTypes.find((currentWorkOrderMilestoneType) => {
        return (currentWorkOrderMilestoneType.workOrderMilestoneType.toLowerCase() ===
            workOrderMilestoneTypeLowerCase);
    });
}
function clearWorkOrderMilestoneTypesCache() {
    workOrderMilestoneTypes = undefined;
}
export function clearCacheByTableName(tableName) {
    switch (tableName) {
        case 'LotOccupantTypes': {
            clearLotOccupantTypesCache();
            break;
        }
        case 'LotStatuses': {
            clearLotStatusesCache();
            break;
        }
        case 'LotTypes':
        case 'LotTypeFields': {
            clearLotTypesCache();
            break;
        }
        case 'OccupancyTypes':
        case 'OccupancyTypeFields':
        case 'OccupancyTypePrints': {
            clearOccupancyTypesCache();
            break;
        }
        case 'WorkOrderMilestoneTypes': {
            clearWorkOrderMilestoneTypesCache();
            break;
        }
        case 'WorkOrderTypes': {
            clearWorkOrderTypesCache();
            break;
        }
    }
}
