"use client";

import { FormEvent, useState } from "react";
import { readApiResponse } from "../lib/chunked-upload";

type Portal = "customer" | "admin";
type Mode = "login" | "register";

const errorMessages: Record<string, string> = {
  google_config: "Google girişi için uygulama anahtarları henüz bağlanmamış.",
  google_cancelled: "Google ile giriş iptal edildi.",
  google_failed: "Google hesabı doğrulanamadı. Lütfen yeniden deneyin.",
  google_not_registered: "Bu Google hesabıyla kayıt bulunamadı. Önce Ücretsiz kayıt ol bölümünden Google ile kayıt olun.",
  google_already_registered: "Bu Google hesabı zaten kayıtlı. Giriş yap bölümünden devam edin.",
  google_admin_disabled: "Yönetici hesaplarında Google girişi kapalıdır. E-posta ve parolanızı kullanın.",
  approval_pending: "Hesabınız yönetici onayı bekliyor. Onaylanınca e-posta ile bilgilendirileceksiniz.",
  phone_required: "Google ile kayıt için geçerli bir telefon numarası girmeniz gerekiyor.",
  license_required: "Bu kurulum için geçerli bir sistem lisansı bulunmuyor.",
};

const noticeMessages: Record<string, string> = {
  approval_pending: "Kaydınız alındı. Yönetici onayından sonra giriş yapabilirsiniz. Onay sonucu e-posta ile gönderilecektir.",
};

export function AuthScreen({ initialPortal, initialError, initialStatus, providers, localAdminEnabled }: {
  initialPortal: Portal;
  initialError: string;
  initialStatus: string;
  providers: { google: boolean };
  localAdminEnabled: boolean;
}) {
  const [portal, setPortal] = useState<Portal>(initialPortal);
  const [mode, setMode] = useState<Mode>("login");
  const [busy, setBusy] = useState(false);
  const [error, setError] = useState(errorMessages[initialError] || "");
  const [notice, setNotice] = useState(noticeMessages[initialStatus] || "");
  const [phone, setPhone] = useState("");

  function choosePortal(next: Portal) {
    setPortal(next);
    setMode("login");
    setError("");
    setNotice("");
  }

  async function submit(event: FormEvent<HTMLFormElement>) {
    event.preventDefault();
    const form = new FormData(event.currentTarget);
    setBusy(true);
    setError("");
    setNotice("");
    try {
      const payload = Object.fromEntries(form.entries());
      payload.portal = portal;
      const response = await fetch(mode === "register" ? "/api/auth/register" : "/api/auth/login", {
        method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload),
      });
      const result = await readApiResponse<{ destination: string }>(response);
      window.location.assign(result.destination);
    } catch (caught) {
      setError(caught instanceof Error ? caught.message : "İşlem tamamlanamadı");
      setBusy(false);
    }
  }

  function openGoogle() {
    setError("");
    setNotice("");
    if (mode === "register") {
      const digits = phone.replace(/\D/g, "");
      if (digits.length < 10) {
        setError("Google ile kayıt için geçerli bir telefon numarası girin.");
        return;
      }
      window.location.assign(`/api/auth/oauth/google/start?intent=register&phone=${encodeURIComponent(phone)}`);
      return;
    }
    window.location.assign("/api/auth/oauth/google/start?intent=login");
  }

  async function openLocalAdmin() {
    setBusy(true);
    setError("");
    try {
      const response = await fetch("/api/auth/dev-admin", { method: "POST" });
      const result = await readApiResponse<{ destination: string }>(response);
      window.location.assign(result.destination);
    } catch (caught) {
      setError(caught instanceof Error ? caught.message : "Yerel yönetici oturumu açılamadı");
      setBusy(false);
    }
  }

  return <main className="authPage">
    <section className="authShowcase">
      <div className="authBrand"><img src="/chipcenter-logo.png" alt="Chip Center" /><span>ECU FILE SERVICE PORTAL</span></div>
      <div className="authPitch">
        <span className="authEyebrow">PROFESYONEL ECU DOSYA SERVİSİ</span>
        <h1>Dosyanızı gönderin,<br/><em>süreci güvenle takip edin.</em></h1>
        <p>Kalibrasyon taleplerinizi tek panelden yönetin; original ve düzenlenmiş dosyalarınıza güvenli şekilde ulaşın.</p>
        <div className="authTrust"><span>✓ Güvenli dosya aktarımı</span><span>✓ Anlık durum takibi</span><span>✓ Uzman tuner desteği</span></div>
      </div>
      <div className="authShowcaseFoot"><span className="openDot"/> Sistem çevrimiçi · CHIP CENTER</div>
    </section>

    <section className="authPanel">
      <div className="authCard">
        <div className="portalSwitch" aria-label="Giriş türü">
          <button type="button" className={portal === "customer" ? "active" : ""} onClick={() => choosePortal("customer")}><span>●</span>Müşteri</button>
          <button type="button" className={portal === "admin" ? "active" : ""} onClick={() => choosePortal("admin")}><span>◆</span>Yönetici</button>
        </div>

        <div className="authHeading">
          <span className="eyebrow">{portal === "admin" ? "YÖNETİCİ GİRİŞİ" : mode === "register" ? "YENİ MÜŞTERİ HESABI" : "MÜŞTERİ PORTALI"}</span>
          <h2>{mode === "register" ? "Hesabınızı oluşturun" : "Tekrar hoş geldiniz"}</h2>
          <p>{portal === "admin" ? "Yalnızca tanımlı CHIP CENTER yöneticileri giriş yapabilir." : mode === "register" ? "Kaydınız yönetici incelemesine gönderilir. Onaydan sonra giriş yapabilirsiniz." : "Dosyalarınıza ve taleplerinize devam edin."}</p>
        </div>

        {portal === "customer" && <div className="authTabs">
          <button type="button" className={mode === "login" ? "active" : ""} onClick={() => { setMode("login"); setError(""); setNotice(""); }}>Giriş yap</button>
          <button type="button" className={mode === "register" ? "active" : ""} onClick={() => { setMode("register"); setError(""); setNotice(""); }}>Ücretsiz kayıt ol</button>
        </div>}

        {portal === "customer" && <><div className="socialAuth single">
          <button type="button" className="socialAuthBtn google" onClick={openGoogle} aria-label={mode === "register" ? "Google ile kayıt ol" : "Google ile giriş yap"}><b>G</b><span>{mode === "register" ? "Google ile kayıt ol" : "Google ile giriş yap"}</span>{!providers.google && <small>Kurulum gerekli</small>}</button>
        </div><div className="authDivider"><span>veya e-posta ile</span></div></>}

        {mode === "register" && <div className="authApprovalNote"><span>⌛</span><div><strong>Yönetici onayı gereklidir</strong><small>Kaydınız incelendikten sonra giriş yapabilirsiniz. Sonuç kayıtlı e-posta adresinize gönderilir.</small></div></div>}

        <form className="authForm" onSubmit={submit}>
          {mode === "register" && <div className="authFormGrid">
            <AuthField label="Ad soyad"><input name="name" autoComplete="name" placeholder="Adınız ve soyadınız" required /></AuthField>
            <AuthField label="Firma / servis adı"><input name="company" autoComplete="organization" placeholder="Örn. Atlas Garage" /></AuthField>
          </div>}
          <AuthField label="E-posta adresi"><input name="email" type="email" autoComplete="email" placeholder="ornek@gmail.com" required /></AuthField>
          {mode === "register" && <AuthField label="Telefon"><input name="phone" type="tel" autoComplete="tel" placeholder="+90 5xx xxx xx xx" value={phone} onChange={event => setPhone(event.target.value)} required /></AuthField>}
          <AuthField label="Parola"><input name="password" type="password" autoComplete={mode === "register" ? "new-password" : "current-password"} placeholder="En az 8 karakter" minLength={8} required /></AuthField>
          {mode === "register" && <AuthField label="Parola tekrar"><input name="passwordConfirm" type="password" autoComplete="new-password" placeholder="Parolanızı yeniden girin" minLength={8} required /></AuthField>}
          {error && <div className="authError" role="alert">{error}</div>}
          {notice && <div className="authNotice" role="status">{notice}</div>}
          <button className="authSubmit" disabled={busy} type="submit">{busy ? "Lütfen bekleyin…" : mode === "register" ? "Müşteri hesabı oluştur" : portal === "admin" ? "Yönetici olarak giriş yap" : "Giriş yap"}<span>→</span></button>
        </form>

        {portal === "admin" && <div className="adminRegistrationLock"><span>🔒</span><div><strong>Yönetici kaydı kapalıdır</strong><small>Yeni kayıt formundan yönetici hesabı oluşturulamaz.</small></div></div>}
        {portal === "admin" && localAdminEnabled && <button className="localAdminBtn" type="button" disabled={busy} onClick={() => void openLocalAdmin()}>Yerel testte admin panelini aç</button>}
        {mode === "register" && <p className="authTerms">Kayıt olarak hizmet koşullarını ve gizlilik politikasını kabul etmiş olursunuz.</p>}
      </div>
    </section>
  </main>;
}

function AuthField({ label, children }: { label: string; children: React.ReactNode }) {
  return <label className="authField"><span>{label}</span>{children}</label>;
}
