/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/

'use client';

import { FloatLabel } from 'primereact/floatlabel';
import { InputText } from 'primereact/inputtext';
import { useState, useEffect } from 'react';
import { classNames } from './button';
import { getSlug } from '@/app/lib/utils';
import { register } from '@/app/api/authentication';
import { getCaptchaChallenge } from '@/app/api/captcha';

export default function RegistrationForm() {
  const [submitted, setSubmitted] = useState<boolean>(false);
  const [errors, setErrors] = useState<string[]>([]);

  const [email, setEmail] = useState<string>("");
  const [password, setPassword] = useState<string>("");
  const [passwordConfirmation, setPasswordConfirmation] = useState<string>("");

  const [slug, setSlug] = useState<string>("default");
  useEffect(() => { setSlug(getSlug()) }, []);

  const [captchaId, setCaptchaId] = useState<string>("");
  const [captchaUrl, setCaptchaUrl] = useState<string>("");
  const [captchaAnswer, setCaptchaAnswer] = useState<string>("");

  const refreshCaptcha = () => {
    getCaptchaChallenge({
      onRetrieve: (id, url) => {
        console.log(id, url);
        setCaptchaId(id);
        setCaptchaUrl(url);
        setCaptchaAnswer("");
      }
    });
  }

  useEffect(refreshCaptcha, [])

  return (
    submitted ? (
      <div className="card flex justify-evenly py-5 flex-col">
        <div className="text-green-500">Registration successful. Check your email for a confirmation link.</div>
      </div>
    ) : (

      <div className="card flex justify-evenly py-5 flex-col">
        <FloatLabel className="my-4">
          <InputText id="email" type="email" className='rounded-sm' onChange={(e) => setEmail(e.target.value)} />
          <label htmlFor="email">Email</label>
        </FloatLabel>
        <FloatLabel className="my-4">
          <InputText id="password" type="password" className='rounded-sm' onChange={(e) => setPassword(e.target.value)} />
          <label htmlFor="password">Password</label>
        </FloatLabel>
        <FloatLabel className="my-4">
          <InputText id="passwordConfirmation" type="password" className='rounded-sm' onChange={(e) => setPasswordConfirmation(e.target.value)} />
          <label htmlFor="passwordConfirmation">Confirm Password</label>
        </FloatLabel>
        <FloatLabel className="my-4">
          <InputText id="slug" type="text" className='rounded-sm' onChange={(e) => setSlug(e.target.value)} />
          <label htmlFor="slug">Slug</label>
        </FloatLabel>
        <img className="w-96" src={captchaUrl} alt="captcha" />
        <FloatLabel className="my-4">
          <InputText id="captcha" type="text" className='rounded-sm' value={captchaAnswer} onChange={(e) => setCaptchaAnswer(e.target.value)} />
          <label htmlFor="captcha">Captcha</label>
        </FloatLabel>

        {errors.map((error, index) => (
          <div key={index} className="text-red-500">{error}</div>
        ))}


        <button
          className={classNames('primary')}
          disabled={!(email && password && passwordConfirmation && slug && captchaAnswer)}
          onClick={() => register(
            {
              slug: slug,
              email: email,
              password: password,
              passwordConfirmation: passwordConfirmation,
              captcha: {
                id: captchaId,
                answer: captchaAnswer
              },
              onRegister: () => { setErrors([]); setSubmitted(true) },
              onError: (errors) => { refreshCaptcha(); setErrors(errors) }
            }
          )}
        >
          Register
        </button>
      </div>
    )

  );
}