import { Request, Response } from "express"
import { z } from "zod"
import {
    CreateProductConfiguratorSchema,
    UpdateProductConfiguratorSchema,
} from "ttm-shared"
import { asyncHandler } from "@/core/asyncHandler"
import { productConfiguratorService } from "./product-configurator.service"

const paramsSchema = z.object({
    id: z.string().uuid(),
})

export const listProductConfigurators = asyncHandler(async (req: Request, res: Response) => {
    const configurators = await productConfiguratorService.findAll(req.shop!.id)
    res.json(configurators)
})

export const getProductConfigurator = asyncHandler(async (req: Request, res: Response) => {
    const { id } = paramsSchema.parse(req.params)
    const configurator = await productConfiguratorService.findById(req.shop!.id, id)
    res.json(configurator)
})

export const createProductConfigurator = asyncHandler(async (req: Request, res: Response) => {
    const data = CreateProductConfiguratorSchema.parse(req.body)
    const configurator = await productConfiguratorService.create(req.shop!.id, data)
    res.status(201).json(configurator)
})

export const updateProductConfigurator = asyncHandler(async (req: Request, res: Response) => {
    const { id } = paramsSchema.parse(req.params)
    const data = UpdateProductConfiguratorSchema.parse(req.body)
    const configurator = await productConfiguratorService.update(req.shop!.id, id, data)
    res.json(configurator)
})

export const deleteProductConfigurator = asyncHandler(async (req: Request, res: Response) => {
    const { id } = paramsSchema.parse(req.params)
    await productConfiguratorService.remove(req.shop!.id, id)
    res.status(204).send()
})

