import { root } from '@repo/core' import { CreateTemplateGenerationInput, RunTemplateInput, TemplateController, TemplateGenerationController, RerunTemplateSchema } from '@repo/sdk' import { useCallback, useState } from 'react' import { type ApiError } from '@/lib/types' import { useError } from '../data/use-error' import z from 'zod' export const useTemplateActions = () => { const [loading, setLoading] = useState(false) const [error, setError] = useState(null) const reRunTemplate = useCallback(async (params: z.infer) => { setLoading(true) setError(null) const template = root.get(TemplateController) const { data, error } = await useError(async () => await template.rerun(params)) if (error) { setError(error) setLoading(false) return { generationId: null, error } } setLoading(false) return { generationId: data?.generationId, error: null } }, []) const runTemplate = useCallback(async (params: RunTemplateInput) => { setLoading(true) setError(null) const template = root.get(TemplateController) const { data, error } = await useError(async () => await template.run(params)) if (error) { setError(error) setLoading(false) return { generationId: null, error } } setLoading(false) return { generationId: data?.generationId, error: null } }, []) const createGeneration = useCallback(async (params: CreateTemplateGenerationInput) => { setLoading(true) setError(null) const templateGeneration = root.get(TemplateGenerationController) const { data, error } = await useError(async () => await templateGeneration.create(params)) if (error) { setError(error) setLoading(false) return { generation: null, error } } setLoading(false) return { generation: data, error: null } }, []) const deleteGeneration = useCallback(async (id: string) => { setLoading(true) setError(null) const templateGeneration = root.get(TemplateGenerationController) const { data, error } = await useError(async () => await templateGeneration.delete({ id })) if (error) { setError(error) setLoading(false) return { success: false, error } } setLoading(false) return { success: true, message: data?.message, error: null } }, []) const batchDeleteGenerations = useCallback(async (ids: string[]) => { setLoading(true) setError(null) const templateGeneration = root.get(TemplateGenerationController) const { data, error } = await useError(async () => await templateGeneration.batchDelete({ ids })) if (error) { setError(error) setLoading(false) return { success: false, error } } setLoading(false) return { success: true, message: data?.message, error: null } }, []) return { loading, error, runTemplate, createGeneration, deleteGeneration, batchDeleteGenerations, reRunTemplate } }