import {ServicePriceRangeSchema, ServiceSchema} from "../../../client";
import {useForm} from "@mantine/form";
import {ContextModalProps} from "@mantine/modals";
import BaseFormModal, {CreateEditFormProps} from "../../ClientsPage/modals/BaseFormModal/BaseFormModal.tsx";
import {NumberInput, TextInput} from "@mantine/core";
import ServiceCategorySelect from "../components/ServiceCategorySelect/ServiceCategorySelect.tsx";
import ServiceTypeSelect from "../components/ServiceTypeSelect/ServiceTypeSelect.tsx";
import ServicePriceInput from "../components/ServicePriceInput/ServicePriceInput.tsx";
import {PriceRangeInputType} from "../components/ServicePriceInput/RangePriceInput.tsx";

type Props = CreateEditFormProps<ServiceSchema>
const CreateServiceModal = ({
                                context,
                                id,
                                innerProps,
                            }: ContextModalProps<Props>) => {

    const isEditing = 'onChange' in innerProps;
    const initialValues: ServiceSchema = isEditing ? innerProps.element : {
        id: -1,
        name: '',
        price: 0,
        category: {
            id: -1,
            name: ''
        },
        serviceType: -1,
        priceRanges: [] as ServicePriceRangeSchema[],
        cost: null
    }

    const form = useForm<ServiceSchema>({
        initialValues: initialValues,
        validate: {
            name: (name: string) => name.trim() !== '' ? null : "Необходимо ввести название услуги",
            category: (category: {
                id: number,
                name: string
            }) => category.id !== -1 ? null : "Необходимо выбрать категорию",
            serviceType: (serviceType: number) => serviceType !== -1 ? null : "Необходимо выбрать тип услуги",
            priceRanges: (value, values) => value.length > 0 || values.price > 0 ? null : "Необходимо добавить хотя бы один диапазон цен или указать цену за единицу услуги",
            price: (value, values) => value > 0 || values.priceRanges.length > 0 ? null : "Необходимо добавить хотя бы один диапазон цен или указать цену за единицу услуги"

        }
    })


    const onCancelClick = () => {
        context.closeContextModal(id);
    }
    return (
        <BaseFormModal
            {...innerProps}
            closeOnSubmit
            form={form}
            onClose={onCancelClick}
        >
            <BaseFormModal.Body>
                <>
                    <ServiceCategorySelect
                        placeholder={"Выберите категорию"}
                        label={"Категория услуги"}
                        {...form.getInputProps('category')}
                    />
                    <TextInput

                        placeholder={"Введите название услуги"}
                        label={"Название услуги"}
                        {...form.getInputProps('name')}
                    />
                    <ServiceTypeSelect
                        placeholder={"Выберите тип услуги"}
                        label={"Тип услуги"}
                        {...form.getInputProps('serviceType')}
                    />
                    <NumberInput
                        placeholder={"Введите себестоимость услуги"}
                        label={"Себестоимость услуги"}
                        hideControls
                        {...form.getInputProps('cost')}
                    />
                    <ServicePriceInput
                        singlePriceInputProps={{
                            hideControls: true,
                            label: "Цена за единицу услуги",
                            placeholder: "Введите цену за одну услугу",
                            ...form.getInputProps('price'),
                        }}
                        priceRangeInputProps={{
                            ...form.getInputProps('priceRanges')
                        } as PriceRangeInputType}
                    />
                </>
            </BaseFormModal.Body>
        </BaseFormModal>
    )
}

export default CreateServiceModal;