import { ApiError } from "@core/Models/Server.Error.model";
import { PaginateServicesParams, PublicServicesResults } from "@models/Service.model";
import ApiRequest from "@services/Api.Service";
import * as Yup from "yup";

const schemaFilterServicces = Yup.object().shape({
    priceFrom: Yup.number().optional().typeError("El precio debe ser un número."),
    priceTo: Yup.number().optional().typeError("El precio debe ser un número."),
    lengthFrom: Yup.number()
        .optional()
        .typeError("La duración debe ser un número expresado en minutos."),
    lengthTo: Yup.number()
        .optional()
        .typeError("La duración debe ser un número expresado en minutos."),
});

export const searchPublicServices = async (
    data: PaginateServicesParams
): Promise<PublicServicesResults> => {
    return new Promise<PublicServicesResults>((resolve, reject) => {
        schemaFilterServicces
            .validate(data, { abortEarly: true })
            .then(() => {
                resolve(ApiRequest.post<PublicServicesResults>("services/search", data));
            })
            .catch((error) => {
                reject(new ApiError(500, error.message));
            });
    });
};
