"use client";

import { useState, useEffect } from "react";
import { useAuth } from "@/context/AuthContext";

function getStoreImage(store) {
  if (store.imageUrl) return store.imageUrl;
  const name = store.storeName?.toLowerCase() ?? "";
  if (name.includes("downtown")) return "/stores/downtown.webp";
  if (name.includes("north")) return "/stores/north.webp";
  if (name.includes("west")) return "/stores/west.webp";
  return "/images/pet-placeholder.png";
}

export default function ContactPage() {
  const { token } = useAuth();
  const [locations, setLocations] = useState([]);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);

  const [subject, setSubject] = useState("");
  const [body, setBody] = useState("");
  const [sending, setSending] = useState(false);
  const [sendError, setSendError] = useState(null);
  const [sendSuccess, setSendSuccess] = useState(false);

  useEffect(() => {
    const params = new URLSearchParams({ page: "0", size: "100", sort: "storeName,asc" });
    fetch(`/api/v1/stores?${params}`)
      .then((res) => {
        if (!res.ok) throw new Error("Unable to load store, please try again later.");
        return res.json();
      })
      .then((data) => setLocations(data.content ?? []))
      .catch(() => setError("Unable to load store, please try again later."))
      .finally(() => setLoading(false));
  }, []);

  async function handleSend(e) {
    e.preventDefault();
    setSending(true);
    setSendError(null);
    try {
      const res = await fetch("/api/v1/contact", {
        method: "POST",
        headers: { "Content-Type": "application/json", Authorization: `Bearer ${token}` },
        body: JSON.stringify({ subject, body }),
      });
      if (!res.ok) throw new Error(`HTTP ${res.status}`);
      setSendSuccess(true);
      setSubject("");
      setBody("");
    } catch (err) {
      setSendError("Failed to send message. Please try again.");
    } finally {
      setSending(false);
    }
  }

  return (
    <main className="info-page">
      <section className="info-hero">
        <h1 className="info-title">Contact Us</h1>
        <p className="info-subtitle">Reach the team, find a location, or connect with store personnel.</p>
        <div className="title-decoration"></div>
      </section>

      <section className="info-content">
        <div className="info-card">
          <h2>General Contact</h2>
          <p>Email: hello@leonspetstore.com.au</p>
          <p>Phone: (03) 9000 0000</p>
          <p>Hours: Mon–Sat, 9:00 AM – 6:00 PM</p>
        </div>

        {token && (
          <div className="info-card">
            <h2>Send Us a Message</h2>
            {sendSuccess ? (
              <p className="contact-success">Your message has been sent. We&apos;ll be in touch soon.</p>
            ) : (
              <form className="auth-form" onSubmit={handleSend}>
                <label className="auth-label">
                  Subject
                  <input
                    className="auth-input"
                    type="text"
                    value={subject}
                    onChange={(e) => setSubject(e.target.value)}
                    required
                    maxLength={150}
                  />
                </label>
                <label className="auth-label">
                  Message
                  <textarea
                    className="auth-input"
                    style={{ resize: "vertical" }}
                    value={body}
                    onChange={(e) => setBody(e.target.value)}
                    required
                    maxLength={2000}
                    rows={6}
                  />
                </label>
                {sendError && <p className="contact-error">{sendError}</p>}
                <button className="auth-submit-btn" type="submit" disabled={sending}>
                  {sending ? "Sending…" : "Send Message"}
                </button>
              </form>
            )}
          </div>
        )}

        <div className="info-card">
          <h2>Store Locations</h2>

          {loading && <p>Loading locations...</p>}

          {error && <p style={{ color: "red" }}>Failed to load locations: {error}</p>}

          {!loading && !error && locations.length === 0 && (
            <p>No store locations found.</p>
          )}

          {!loading && !error && locations.length > 0 && (
            <div className="info-card-grid">
              {locations.map((location) => (
                <article key={location.storeId} className="info-mini-card location-card">
                  <div className="location-card-image-wrapper">
                    <img
                      src={getStoreImage(location)}
                      alt={location.storeName}
                      className="location-card-image"
                      onError={(e) => {
                        e.currentTarget.onerror = null;
                        e.currentTarget.src = "/images/pet-placeholder.png";
                      }}
                    />
                  </div>
                  <div className="location-card-body">
                    <h3>{location.storeName}</h3>
                    <p>{location.address}</p>
                    <p>{location.phone}</p>
                    <p>{location.email}</p>
                  </div>
                </article>
              ))}
            </div>
          )}
        </div>
      </section>
    </main>
  );
}
