import { useEffect, type FC } from 'react'
import { useParams } from 'react-router-dom'
import { useGetThemeById, useUpdateTheme } from './hooks/useThemeData'
import PageTitle from '@/components/PageTitle'
import Button from '@/components/Button'
import { TickCircle } from 'iconsax-react'
import Input from '@/components/Input'
import { useFormik } from 'formik'
import * as Yup from 'yup'
import type { CreateThemeType } from './type/Types'
import { toast } from 'react-toastify'
import { extractErrorMessage } from '@/helpers/utils'
import { Pages } from '@/config/Pages'
import { ThemeInputType } from './enum/Enum'
import { useNavigate } from 'react-router-dom'
import Select from '@/components/Select'

const UpdateTheme: FC = () => {
    const { id } = useParams<{ id: string }>()
    const navigate = useNavigate()
    const { data } = useGetThemeById(id!)
    const { mutate: updateTheme, isPending } = useUpdateTheme()

    const formik = useFormik<CreateThemeType>({
        initialValues: {
            title: '',
            inputType: ThemeInputType.Color,
        },
        validationSchema: Yup.object({
            title: Yup.string().required('عنوان تم الزامی است'),
            inputType: Yup.string().required('نوع ورودی تم الزامی است'),
        }),
        onSubmit: (values) => {
            updateTheme({ id: id!, params: values }, {
                onSuccess: () => {
                    toast.success('تم با موفقیت ویرایش شد')
                    navigate(Pages.products.theme.list)
                },
                onError: (error) => {
                    toast.error(extractErrorMessage(error))
                }
            })
        },
    })

    useEffect(() => {
        if (data?.results?.data) {
            formik.setValues({
                title: data?.results?.data?.title,
                inputType: data?.results?.data?.inputType,
            })
        }
        // eslint-disable-next-line react-hooks/exhaustive-deps
    }, [data])

    return (
        <div>
            <PageTitle title1='ویرایش تم' />

            <div className='bg-white p-8 rounded-4xl'>
                <div>
                    <Input
                        label='عنوان تم'
                        placeholder='عنوان تم را وارد کنید'
                        {...formik.getFieldProps('title')}
                        error_text={formik.touched.title && formik.errors.title ? formik.errors.title : ''}
                    />
                </div>

                <div className='mt-5'>
                    <Select
                        label='نوع ورودی تم'
                        placeholder='انتخاب نوع ورودی تم'
                        value={formik.values.inputType}
                        onChange={(e) => formik.setFieldValue('inputType', e.target.value)}
                        items={[
                            { value: ThemeInputType.Color, label: 'رنگ' },
                            { value: ThemeInputType.Text, label: 'متن' },
                        ]}
                        error_text={formik.touched.inputType && formik.errors.inputType ? formik.errors.inputType : ''}
                    />
                </div>

                <div className='mt-5 flex justify-end'>
                    <Button
                        onClick={() => formik.handleSubmit()}
                        isLoading={isPending}
                        disabled={!formik.isValid || isPending}
                        className='w-fit'
                    >
                        <div className='flex gap-2 items-center'>
                            <TickCircle size={16} color='#fff' />
                            <div>ذخیره</div>
                        </div>
                    </Button>
                </div>
            </div>
        </div>
    )
}

export default UpdateTheme