import { useState } from "react";
import { z } from "zod";
import { useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
import { Link } from "react-router-dom";
import { toast } from "sonner";
import { supabase } from "@/integrations/supabase/client";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import {
  Form,
  FormControl,
  FormField,
  FormItem,
  FormLabel,
  FormMessage,
} from "@/components/ui/form";

const schema = z.object({
  email: z.string().trim().email({ message: "Adresse email invalide" }).max(255),
});

export default function ForgotPassword() {
  const [isSubmitting, setIsSubmitting] = useState(false);
  const [sent, setSent] = useState(false);

  const form = useForm<z.infer<typeof schema>>({
    resolver: zodResolver(schema),
    defaultValues: { email: "" },
  });

  async function onSubmit(values: z.infer<typeof schema>) {
    setIsSubmitting(true);
    try {
      const { error } = await supabase.auth.resetPasswordForEmail(values.email, {
        redirectTo: `${window.location.origin}/reset-password`,
      });
      if (error) throw error;
      setSent(true);
      toast.success("Email envoyé. Consultez votre boîte de réception.");
    } catch (error: unknown) {
      console.error("Reset password email error:", error);
      toast.error(error instanceof Error ? error.message : "Erreur lors de l'envoi de l'email");
    } finally {
      setIsSubmitting(false);
    }
  }

  return (
    <div className="flex items-center justify-center min-h-[80vh] py-10 px-4">
      <div className="surface-card w-full max-w-md p-6 sm:p-9">
        <div className="text-center mb-8">
          <h1 className="text-2xl font-bold">Mot de passe oublié</h1>
          <p className="mt-2 text-muted-foreground">
            Entrez votre email pour recevoir un lien de réinitialisation.
          </p>
        </div>

        {sent ? (
          <div className="text-center space-y-4">
            <p className="text-gray-700">
              Si un compte est associé à cette adresse, un email vient de vous être envoyé.
            </p>
            <Link to="/login" className="font-semibold text-primary hover:underline">
              Retour à la connexion
            </Link>
          </div>
        ) : (
          <Form {...form}>
            <form onSubmit={form.handleSubmit(onSubmit)} className="space-y-6">
              <FormField
                control={form.control}
                name="email"
                render={({ field }) => (
                  <FormItem>
                    <FormLabel>Email</FormLabel>
                    <FormControl>
                      <Input placeholder="exemple@email.com" {...field} />
                    </FormControl>
                    <FormMessage />
                  </FormItem>
                )}
              />
              <Button type="submit" className="w-full" disabled={isSubmitting}>
                {isSubmitting ? "Envoi..." : "Envoyer le lien"}
              </Button>
            </form>
          </Form>
        )}

        <div className="mt-6 text-center">
          <Link to="/login" className="font-semibold text-primary hover:underline">
            Retour à la connexion
          </Link>
        </div>
      </div>
    </div>
  );
}
