'use client';

import { useActionState } from 'react';
import { useFormStatus } from 'react-dom';
import { authenticate } from '@/app/actions/auth';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import Link from 'next/link';
import { useLanguage } from '@/lib/i18n';

function LoginButton() {
  const { pending } = useFormStatus();
  const { t } = useLanguage();
  return (
    <Button className="w-full mt-4" aria-disabled={pending}>
      {t('auth.signIn')}
    </Button>
  );
}

export function LoginForm({ allowRegister = true }: { allowRegister?: boolean }) {
  const [errorMessage, dispatch] = useActionState(authenticate, undefined);
  const { t } = useLanguage();

  return (
    <form action={dispatch} className="space-y-3">
      <div className="flex-1 rounded-lg bg-gray-50 px-6 pb-4 pt-8">
        <h1 className="mb-3 text-2xl font-bold">
          {t('auth.signInToAccount')}
        </h1>
        <div className="w-full">
          <div>
            <label
              className="mb-3 mt-5 block text-xs font-medium text-gray-900"
              htmlFor="email"
            >
              {t('auth.email')}
            </label>
            <div className="relative">
              <Input
                className="peer block w-full rounded-md border border-gray-200 py-[9px] pl-10 text-sm outline-2 placeholder:text-gray-500"
                id="email"
                type="email"
                name="email"
                placeholder={t('auth.emailPlaceholder')}
                required
              />
            </div>
          </div>
          <div className="mt-4">
            <label
              className="mb-3 mt-5 block text-xs font-medium text-gray-900"
              htmlFor="password"
            >
              {t('auth.password')}
            </label>
            <div className="relative">
              <Input
                className="peer block w-full rounded-md border border-gray-200 py-[9px] pl-10 text-sm outline-2 placeholder:text-gray-500"
                id="password"
                type="password"
                name="password"
                placeholder={t('auth.passwordPlaceholder')}
                required
                minLength={6}
              />
            </div>
          </div>
        </div>
        <div className="flex items-center justify-end mt-2">
          <Link
            href="/forgot-password"
            className="text-xs text-gray-500 hover:text-gray-900 underline"
          >
            {t('auth.forgotPassword')}
          </Link>
        </div>
        <LoginButton />
        <div
          className="flex h-8 items-end space-x-1"
          aria-live="polite"
          aria-atomic="true"
        >
          {errorMessage && (
            <p className="text-sm text-red-500">{errorMessage}</p>
          )}
        </div>
        {allowRegister && (
          <div className="mt-4 text-center text-sm">
            {t('auth.noAccount')}{' '}
            <Link href="/register" className="underline">
              {t('auth.signUp')}
            </Link>
          </div>
        )}
      </div>
    </form>
  );
}
