/**
 * Copyright 2013-2026 the original author or authors from the JHipster project.
 *
 * This file is part of the JHipster project, see https://www.jhipster.tech/
 * for more information.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import { kebabCase, upperFirst } from 'lodash-es';
import { normalizePathEnd } from "../../lib/utils/path.js";
import { pluralize } from "../../lib/utils/string-utils.js";
import { upperFirstCamelCase } from "../../lib/utils/string.js";
import { getTypescriptType } from "./support/types-utils.js";
const htmlInputTypeForTsType = {
    number: 'number',
    boolean: 'checkbox',
    'dayjs.Dayjs': 'datetime-local',
};
export const mutateField = {
    __override__: false,
    tsType: ({ fieldType, fieldIsEnum }) => (fieldIsEnum ? fieldType : getTypescriptType(fieldType)),
    htmlInputType: ({ fieldIsEnum, fieldTypeLocalTime, tsType, fieldTypeBinary, blobContentTypeText }) => {
        if (fieldIsEnum) {
            return 'select';
        }
        if (fieldTypeLocalTime) {
            return 'time';
        }
        if (fieldTypeBinary && !blobContentTypeText) {
            return 'hidden';
        }
        return htmlInputTypeForTsType[tsType] ?? 'text';
    },
    // ...buildMutateDataForProperty('tsType', fieldTsTypes, { prefix: 'fieldTsType' }),
};
export const mutateEntity = {
    __override__: false,
    entityAngularJSSuffix: data => {
        const entityAngularJSSuffix = data.entityAngularJSSuffix ?? data.angularJSSuffix ?? '';
        return entityAngularJSSuffix.startsWith('-') || !entityAngularJSSuffix ? entityAngularJSSuffix : `-${entityAngularJSSuffix}`;
    },
    entityTsName: data => upperFirst(data.entityNameCapitalized) + upperFirstCamelCase(data.entityAngularJSSuffix),
    entityFileName: data => kebabCase(data.entityNameCapitalized + upperFirst(data.entityAngularJSSuffix)),
    entityFolderName: data => `${normalizePathEnd(data.clientRootFolder)}${data.entityFileName}`,
    entityModelFileName: data => data.entityFolderName,
    entityPluralFileName: data => `${data.entityNamePluralizedAndSpinalCased}${data.entityAngularJSSuffix}`,
    entityServiceFileName: data => data.entityFileName,
    entityStateName: data => kebabCase(data.entityTsName),
    entityUrl: data => data.entityStateName,
    entityAngularName: data => data.entityTsName,
    entityAngularNamePlural: data => pluralize(data.entityAngularName, { force: true }),
    entityReactName: data => data.entityTsName,
};
