import { useRef, useEffect } from 'react'
import dayjs from 'dayjs'
import { useForm } from 'react-hook-form'
import { useToast } from '@chakra-ui/react'
import { useTranslation } from 'react-i18next'

import { api } from '../../../__data__/api/api'

interface NewCourseForm {
  startDt: string
  name: string
}

/**
 * Хук для управления созданием нового курса
 * @param onSuccess Коллбэк, который будет вызван после успешного создания курса
 * @returns Объект с формой и функциями для создания курса
 */
export const useCreateCourse = (onSuccess: () => void) => {
  const toast = useToast()
  const toastRef = useRef(null)
  const { t } = useTranslation()
  const [createUpdateCourse, crucQuery] = api.useCreateUpdateCourseMutation()
  
  const {
    control,
    handleSubmit,
    reset,
    formState: { errors },
    getValues,
  } = useForm<NewCourseForm>({
    defaultValues: {
      startDt: dayjs().format('YYYY-MM-DD'),
      name: t('journal.pl.course.defaultName'),
    },
  })

  const onSubmit = ({ startDt, name }: NewCourseForm) => {
    toastRef.current = toast({
      title: t('journal.pl.course.sending'),
      status: 'loading',
      duration: 9000,
    })
    createUpdateCourse({ name, startDt })
  }

  useEffect(() => {
    if (crucQuery.isSuccess) {
      const values = getValues()
      if (toastRef.current) {
        toast.update(toastRef.current, {
          title: t('journal.pl.course.created'),
          description: t('journal.pl.course.successMessage', { name: values.name }),
          status: 'success',
          duration: 9000,
          isClosable: true,
        })
      }
      reset()
      onSuccess()
    }
  }, [crucQuery.isSuccess, t, onSuccess, reset, getValues, toast])

  return {
    control,
    errors,
    handleSubmit,
    onSubmit,
    isLoading: crucQuery.isLoading,
    error: crucQuery.error
  }
} 