"use client";

import { useState } from "react";
import Link from "next/link";
import { useSearchParams, useRouter } from "next/navigation";
import { useForm } from "react-hook-form";
import { z } from "zod";
import { zodResolver } from "@hookform/resolvers/zod";
import { Mail, KeyRound } from "lucide-react";
import { authApi } from "@/lib/api";
import { Spinner } from "@/components/ui";
import toast from "react-hot-toast";

const requestSchema = z.object({ email: z.string().email("Geçerli bir e-posta girin.") });
const resetSchema = z.object({
  new_password: z.string().min(8, "En az 8 karakter."),
  confirm: z.string(),
}).refine((d) => d.new_password === d.confirm, { message: "Şifreler eşleşmiyor.", path: ["confirm"] });

export default function SifreSifirlaPage() {
  const searchParams = useSearchParams();
  const router = useRouter();
  const token = searchParams.get("token");
  const [sent, setSent] = useState(false);

  // E-posta formu
  const emailForm = useForm({ resolver: zodResolver(requestSchema) });
  const [emailLoading, setEmailLoading] = useState(false);

  const handleRequestReset = async (data: { email: string }) => {
    setEmailLoading(true);
    try {
      await authApi.forgotPassword(data.email);
      setSent(true);
      toast.success("Şifre sıfırlama bağlantısı gönderildi.");
    } catch {
      toast.error("Bir hata oluştu.");
    } finally {
      setEmailLoading(false);
    }
  };

  // Yeni şifre formu
  const resetForm = useForm({ resolver: zodResolver(resetSchema) });
  const [resetLoading, setResetLoading] = useState(false);

  const handleReset = async (data: { new_password: string }) => {
    if (!token) return;
    setResetLoading(true);
    try {
      await authApi.resetPassword(token, data.new_password);
      toast.success("Şifreniz güncellendi! Giriş yapabilirsiniz.");
      router.push("/giris");
    } catch (err: any) {
      toast.error(err?.response?.data?.detail || "Token geçersiz veya süresi dolmuş.");
    } finally {
      setResetLoading(false);
    }
  };

  if (token) {
    return (
      <div className="kaplan-card">
        <div className="flex items-center gap-3 mb-5">
          <div className="w-10 h-10 bg-brand-600/20 rounded-lg flex items-center justify-center">
            <KeyRound size={18} className="text-brand-400" />
          </div>
          <div>
            <h1 className="text-base font-semibold text-surface-100">Yeni Şifre Belirle</h1>
            <p className="text-xs text-surface-500">En az 8 karakter kullanın</p>
          </div>
        </div>
        <form onSubmit={resetForm.handleSubmit(handleReset)} className="space-y-4">
          <div>
            <label className="form-label">Yeni Şifre</label>
            <input {...resetForm.register("new_password")} type="password" placeholder="En az 8 karakter" className="kaplan-input" />
            {resetForm.formState.errors.new_password && <p className="text-xs text-red-400 mt-1">{resetForm.formState.errors.new_password.message as string}</p>}
          </div>
          <div>
            <label className="form-label">Şifre Tekrar</label>
            <input {...resetForm.register("confirm")} type="password" placeholder="Şifrenizi tekrar girin" className="kaplan-input" />
            {resetForm.formState.errors.confirm && <p className="text-xs text-red-400 mt-1">{resetForm.formState.errors.confirm.message as string}</p>}
          </div>
          <button type="submit" disabled={resetLoading} className="btn-primary w-full justify-center py-2.5">
            {resetLoading ? <Spinner size={16} /> : <KeyRound size={16} />} Şifremi Güncelle
          </button>
        </form>
      </div>
    );
  }

  if (sent) {
    return (
      <div className="kaplan-card text-center">
        <div className="text-4xl mb-4">📧</div>
        <h2 className="text-base font-semibold text-surface-100 mb-2">E-posta Gönderildi</h2>
        <p className="text-sm text-surface-400 mb-6">E-posta adresinize şifre sıfırlama bağlantısı gönderdik. Lütfen gelen kutunuzu kontrol edin.</p>
        <Link href="/giris" className="btn-secondary inline-flex justify-center">Giriş Sayfasına Dön</Link>
      </div>
    );
  }

  return (
    <div className="kaplan-card">
      <div className="flex items-center gap-3 mb-5">
        <div className="w-10 h-10 bg-brand-600/20 rounded-lg flex items-center justify-center">
          <Mail size={18} className="text-brand-400" />
        </div>
        <div>
          <h1 className="text-base font-semibold text-surface-100">Şifre Sıfırla</h1>
          <p className="text-xs text-surface-500">E-postanıza sıfırlama bağlantısı gönderilecek</p>
        </div>
      </div>
      <form onSubmit={emailForm.handleSubmit(handleRequestReset)} className="space-y-4">
        <div>
          <label className="form-label">E-posta Adresi</label>
          <input {...emailForm.register("email")} type="email" placeholder="ornek@email.com" className="kaplan-input" />
          {emailForm.formState.errors.email && <p className="text-xs text-red-400 mt-1">{emailForm.formState.errors.email.message as string}</p>}
        </div>
        <button type="submit" disabled={emailLoading} className="btn-primary w-full justify-center py-2.5">
          {emailLoading ? <Spinner size={16} /> : <Mail size={16} />} Sıfırlama Bağlantısı Gönder
        </button>
      </form>
      <p className="text-center text-sm text-surface-500 mt-5">
        <Link href="/giris" className="text-brand-400 hover:text-brand-300">← Giriş Sayfasına Dön</Link>
      </p>
    </div>
  );
}
