'use client';

import {
  Dialog,
  DialogContent,
  DialogHeader,
  DialogTitle,
  DialogFooter
} from '@/components/ui/dialog';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import { Textarea } from '@/components/ui/textarea';
import { useForm } from 'react-hook-form';
import z from 'zod';
import { zodResolver } from '@hookform/resolvers/zod';

const schema = z.object({
  title: z.string().optional(),
  description: z.string().optional()
});

export type TimelineSettingsForm = z.infer<typeof schema>;

const defaultValues: TimelineSettingsForm = {
  title: '',
  description: ''
};

type Props = {
  open: boolean;
  onOpenChange: (v: boolean) => void;
  initialValues: TimelineSettingsForm;
  onSubmit: (data: TimelineSettingsForm) => void;
};

export function TimelineSettingsDialog({
  open,
  onOpenChange,
  initialValues,
  onSubmit
}: Props) {
  const { handleSubmit, reset, register } = useForm<TimelineSettingsForm>({
    resolver: zodResolver(schema),
    defaultValues: initialValues ?? defaultValues
  });

  return (
    <Dialog open={open} onOpenChange={onOpenChange}>
      <DialogContent>
        <DialogHeader>
          <DialogTitle>Timeline settings</DialogTitle>
        </DialogHeader>

        <div className='flex flex-col gap-3'>
          <Input placeholder='Widget title' {...register('title')} />
          <Textarea
            rows={4}
            placeholder='Widget description'
            {...register('description')}
          />
        </div>
        <DialogFooter>
          <Button
            type='button'
            variant='outline'
            onClick={() => {
              onOpenChange(false);
              reset(defaultValues);
            }}
          >
            Cancel
          </Button>
          <Button type='button' onClick={handleSubmit(onSubmit)}>
            Save
          </Button>
        </DialogFooter>
      </DialogContent>
    </Dialog>
  );
}
