import { FC, useEffect } from 'react'
import { useTranslation } from 'react-i18next'
import Button from '../../components/Button'
import { TickCircle, TickSquare } from 'iconsax-react'
import SwitchComponent from '../../components/Switch'
import Input from '../../components/Input'
import { useFormik } from 'formik'
import { CreateBankType } from './types/CardBankTypes'
import * as Yup from 'yup'
import { useGetCardBankDetail, useUpdateBank } from './hooks/useCardBankData'
import { useNavigate, useParams } from 'react-router-dom'
import { Pages } from '../../config/Pages'
import { ErrorType } from '../../helpers/types'
import { toast } from 'react-toastify'

const EditBankCard: FC = () => {

    const { id } = useParams()
    const navigate = useNavigate()
    const { t } = useTranslation('global')
    const updateBank = useUpdateBank(id ? id : '')
    const getCard = useGetCardBankDetail(id ? id : '')

    const formik = useFormik<CreateBankType>({
        initialValues: {
            accountOwnerName: '',
            bankName: '',
            cardNumber: '',
            IBan: '',
            isActive: true,
        },
        validationSchema: Yup.object({
            accountOwnerName: Yup.string().required(t('errors.required')),
            bankName: Yup.string().required(t('errors.required')),
            cardNumber: Yup.string().required(t('errors.required')),
            IBan: Yup.string().required(t('errors.required')),
        }),
        onSubmit: (values) => {
            updateBank.mutate(values, {
                onSuccess: () => {
                    formik.resetForm()
                    navigate(Pages.cardBank.list)
                },
                onError: (error: ErrorType) => {
                    toast.error(error.response?.data?.error?.message[0])
                }
            })
        }
    })

    useEffect(() => {

        if (getCard.data?.data?.bankAccount) {
            const data = getCard.data?.data?.bankAccount

            formik.setValues({
                accountOwnerName: data.accountOwnerName,
                bankName: data.bankName,
                cardNumber: data.cardNumber,
                IBan: data.IBan,
                isActive: data.isActive,
            })
        }

        // eslint-disable-next-line react-hooks/exhaustive-deps
    }, [getCard.data])


    return (
        <div className='mt-4'>
            <div className='flex justify-between items-center'>
                <div>
                    {t('cardBank.new_account')}
                </div>
                <div>
                    <Button
                        className='px-4'
                        onClick={() => formik.handleSubmit()}
                        isLoading={updateBank.isPending}
                    >
                        <div className='flex gap-2 items-center'>
                            <TickCircle
                                size={15}
                                color='#fff'
                            />
                            <div>{t('edit')}</div>
                        </div>
                    </Button>
                </div>
            </div>

            <div className='flex gap-6 xl:mt-8 mt-4'>
                <div className='flex-1 text-sm bg-white py-8 xl:px-10 px-4 rounded-3xl'>
                    <div>
                        {t('cardBank.account_information')}
                    </div>

                    <div className='mt-10 flex items-center gap-5'>
                        <div>
                            {t('cardBank.status_account')}
                        </div>
                        <SwitchComponent
                            active={formik.values.isActive}
                            onChange={(value) => formik.setFieldValue('isActive', value)}
                        />
                    </div>

                    <div className='mt-8 rowTwoInput'>
                        <Input
                            label={t('cardBank.account_owner_name')}
                            name='accountOwnerName'
                            value={formik.values.accountOwnerName}
                            onChange={formik.handleChange}
                            error_text={formik.touched.accountOwnerName && formik.errors.accountOwnerName ? formik.errors.accountOwnerName : ''}
                        />
                        <Input
                            label={t('cardBank.bank_name')}
                            name='bankName'
                            value={formik.values.bankName}
                            onChange={formik.handleChange}
                            error_text={formik.touched.bankName && formik.errors.bankName ? formik.errors.bankName : ''}
                        />
                    </div>
                    <div className='mt-8 rowTwoInput'>
                        <Input
                            label={t('cardBank.card_number')}
                            name='cardNumber'
                            value={formik.values.cardNumber}
                            onChange={formik.handleChange}
                            error_text={formik.touched.cardNumber && formik.errors.cardNumber ? formik.errors.cardNumber : ''}
                        />
                        <Input
                            label={t('cardBank.sheba')}
                            name='IBan'
                            value={formik.values.IBan}
                            onChange={formik.handleChange}
                            error_text={formik.touched.IBan && formik.errors.IBan ? formik.errors.IBan : ''}
                        />
                    </div>
                </div>

                <div className='bg-white w-sidebar xl:block hidden py-10 px-5 h-fit rounded-3xl'>
                    <div className='text-sm'>
                        {t('ticket.title_hint')}
                    </div>

                    <div className='mt-6'>
                        <div className='flex items-start gap-2 border-b pb-5'>
                            <div>
                                <TickSquare size={20} color='black' variant='Bold' />
                            </div>
                            <div className='text-description text-xs leading-5'>
                                سوالات - مشکلاتی که به یک موضوع مربوط میشوند را در یک درخواست پشتیبانی پیگیر باشید و چند درخواست برای یک موضوع باز نکنید.
                            </div>
                        </div>
                        <div className='flex items-start gap-2 mt-6 border-b pb-5'>
                            <div>
                                <TickSquare size={20} color='black' variant='Bold' />
                            </div>
                            <div className='text-description text-xs leading-5'>
                                لطفاً برای بررسی و رفع مشکلات احتمالی صبور باشید بررسی و رفع مشکلات در برخی موارد زمان گیر است.
                            </div>
                        </div>
                        <div className='flex items-start gap-2 mt-6'>
                            <div>
                                <TickSquare size={20} color='black' variant='Bold' />
                            </div>
                            <div className='text-description text-xs leading-5'>
                                پاسخگویی 24 ساعته تلفنی را تنها از میهن وب هاست می توانید انتظار داشته باشید .بخش پشتیبانی در هر ساعتی حتی در روز های تعطیل آماده پیگیری سریع مشکلات کاربران است.
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    )
}

export default EditBankCard