<template>
    <div class="min-h-screen bg-gray-50 py-10 px-6">
      <div class="max-w-5xl mx-auto bg-white rounded-2xl shadow-lg p-8">
        <h1 class="text-2xl font-bold text-center text-gray-800">
          Form Undangan Pernikahan Premium
        </h1>
        <p class="text-center text-gray-500 text-sm mb-8">
          Isi semua data berikut dengan lengkap dan benar.
        </p>
  
        <!-- Data Pemesan -->
        <section class="mb-8">
          <h2 class="font-semibold text-blue-600 mb-3 border-b pb-1">📋 Data Pemesan</h2>
          <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
            <input v-model="form.nama_pemesan" type="text" placeholder="Nama Pemesan"
              class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:ring-2 focus:ring-blue-400 focus:border-blue-400 outline-none transition" />
            <input v-model="form.email" type="email" placeholder="Email"
              class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:ring-2 focus:ring-blue-400 focus:border-blue-400 outline-none transition" />
            <input v-model="form.no_tlpn" type="text" placeholder="No Telepon"
              class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:ring-2 focus:ring-blue-400 focus:border-blue-400 outline-none transition" />
          </div>
        </section>
  
        <!-- Data Mempelai -->
        <section class="mb-8">
          <h2 class="font-semibold text-blue-600 mb-3 border-b pb-1">💍 Data Mempelai</h2>
          <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
            <!-- Mempelai Pria -->
            <div>
              <h3 class="font-medium text-gray-700 mb-2">Mempelai Pria</h3>
              <div class="grid gap-2">
                <input v-model="form.form.nama_lengkap_pria" placeholder="Nama Lengkap"
                  class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:ring-2 focus:ring-blue-400 focus:border-blue-400 outline-none transition" />
                <input v-model="form.form.nama_panggilan_pria" placeholder="Nama Panggilan"
                  class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:ring-2 focus:ring-blue-400 focus:border-blue-400 outline-none transition" />
                <input v-model="form.form.nama_bapak_pria" placeholder="Nama Bapak"
                  class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:ring-2 focus:ring-blue-400 focus:border-blue-400 outline-none transition" />
                <input v-model="form.form.nama_ibu_pria" placeholder="Nama Ibu"
                  class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:ring-2 focus:ring-blue-400 focus:border-blue-400 outline-none transition" />
                <input v-model="form.form.instagram_pria" placeholder="Instagram"
                  class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:ring-2 focus:ring-blue-400 focus:border-blue-400 outline-none transition" />
                <input v-model="form.form.facebook_pria" placeholder="Facebook"
                  class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:ring-2 focus:ring-blue-400 focus:border-blue-400 outline-none transition" />
                <input v-model="form.form.twitter_pria" placeholder="Twitter"
                  class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:ring-2 focus:ring-blue-400 focus:border-blue-400 outline-none transition" />
              </div>
            </div>
  
            <!-- Mempelai Wanita -->
            <div>
              <h3 class="font-medium text-gray-700 mb-2">Mempelai Wanita</h3>
              <div class="grid gap-2">
                <input v-model="form.form.nama_lengkap_wanita" placeholder="Nama Lengkap"
                  class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:ring-2 focus:ring-pink-400 focus:border-pink-400 outline-none transition" />
                <input v-model="form.form.nama_panggilan_wanita" placeholder="Nama Panggilan"
                  class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:ring-2 focus:ring-pink-400 focus:border-pink-400 outline-none transition" />
                <input v-model="form.form.nama_bapak_wanita" placeholder="Nama Bapak"
                  class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:ring-2 focus:ring-pink-400 focus:border-pink-400 outline-none transition" />
                <input v-model="form.form.nama_ibu_wanita" placeholder="Nama Ibu"
                  class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:ring-2 focus:ring-pink-400 focus:border-pink-400 outline-none transition" />
                <input v-model="form.form.instagram_wanita" placeholder="Instagram"
                  class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:ring-2 focus:ring-pink-400 focus:border-pink-400 outline-none transition" />
                <input v-model="form.form.facebook_wanita" placeholder="Facebook"
                  class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:ring-2 focus:ring-pink-400 focus:border-pink-400 outline-none transition" />
                <input v-model="form.form.twitter_wanita" placeholder="Twitter"
                  class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:ring-2 focus:ring-pink-400 focus:border-pink-400 outline-none transition" />
              </div>
            </div>
          </div>
        </section>
  
        <!-- Cerita Kita -->
        <section class="mb-8">
          <h2 class="font-semibold text-blue-600 mb-3 border-b pb-1">💌 Cerita Kita</h2>
          <textarea v-model="form.form.cerita_kita" rows="4" placeholder="Ceritakan kisah kalian..."
            class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:ring-2 focus:ring-blue-400 focus:border-blue-400 outline-none transition resize-none"></textarea>
        </section>
  
        <!-- Rekening & Musik -->
        <section class="mb-8">
          <h2 class="font-semibold text-blue-600 mb-3 border-b pb-1">💳 Rekening & Musik</h2>
          <div class="grid md:grid-cols-3 gap-4">
            <input v-model="form.form.rekening1" placeholder="Rekening 1"
              class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:ring-2 focus:ring-blue-400 focus:border-blue-400 outline-none transition" />
            <input v-model="form.form.rekening2" placeholder="Rekening 2"
              class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:ring-2 focus:ring-blue-400 focus:border-blue-400 outline-none transition" />
            <input v-model="form.form.rekening3" placeholder="Rekening 3"
              class="w-full border border-gray-300 rounded-lg px-3 py-2 focus:ring-2 focus:ring-blue-400 focus:border-blue-400 outline-none transition" />
          </div>
          <input v-model="form.form.link_music" placeholder="Link Music (opsional)"
            class="w-full border border-gray-300 rounded-lg px-3 py-2 mt-4 focus:ring-2 focus:ring-blue-400 focus:border-blue-400 outline-none transition" />
        </section>
  
        <!-- Foto Upload -->
        <section class="mb-8">
          <h2 class="font-semibold text-blue-600 mb-3 border-b pb-1">🖼️ Galeri Foto</h2>
          <div
            class="border-2 border-dashed border-gray-300 rounded-xl p-8 flex flex-col justify-center items-center text-gray-400 hover:border-blue-400 hover:text-blue-500 transition"
          >
            <input
              id="gallery"
              type="file"
              multiple
              accept="image/*"
              class="hidden"
              @change="handleFileChange"
            />
            <label v-if="!previews.length" for="gallery" class="cursor-pointer flex flex-col items-center">
              <span class="text-4xl font-bold">+</span>
              <span class="text-sm mt-2">Pilih Foto (maks. 6, JPEG/PNG, maks. 2MB)</span>
            </label>
            <div v-else class="grid grid-cols-3 sm:grid-cols-4 gap-4">
              <div
                v-for="(src, i) in previews"
                :key="i"
                class="relative group"
              >
                <img
                  :src="src"
                  class="w-24 h-24 object-cover rounded-lg border shadow"
                />
                <button
                  @click="removeFile(i)"
                  class="absolute -top-2 -right-2 bg-red-500 text-white rounded-full w-5 h-5 flex items-center justify-center text-xs opacity-0 group-hover:opacity-100 transition"
                  title="Hapus foto"
                >
                  ✕
                </button>
              </div>
              <label
                v-if="previews.length < 6"
                for="gallery"
                class="cursor-pointer flex flex-col items-center justify-center w-24 h-24 border-2 border-dashed border-gray-300 rounded-lg text-gray-400 hover:border-blue-400 hover:text-blue-500 transition"
              >
                <span class="text-3xl font-bold">+</span>
              </label>
            </div>
          </div>
        </section>
  
        <!-- Tombol -->
        <div class="text-end mt-6">
          <button @click="batal"
            class="bg-gray-600 text-white font-semibold px-6 py-2 rounded-lg transition mr-2">
            Batal
          </button>
          <button @click="konfirmasi"
            class="bg-blue-700 text-white font-semibold px-6 py-2 rounded-lg transition">
            Konfirmasi
          </button>
        </div>
      </div>
    </div>
</template>

<script setup>
import { ref, onMounted } from 'vue'
import { useRouter } from 'vue-router'

const router = useRouter()
const templates = ref([])

const form = ref({
  nama_pemesan: '',
  email: '',
  no_tlpn: '',
  form: {
    nama_lengkap_pria: '',
    nama_panggilan_pria: '',
    nama_bapak_pria: '',
    nama_ibu_pria: '',
    instagram_pria: '',
    facebook_pria: '',
    twitter_pria: '',
    nama_lengkap_wanita: '',
    nama_panggilan_wanita: '',
    nama_bapak_wanita: '',
    nama_ibu_wanita: '',
    instagram_wanita: '',
    facebook_wanita: '',
    twitter_wanita: '',
    cerita_kita: '',
    rekening1: '',
    rekening2: '',
    rekening3: '',
    link_music: ''
  },
  foto: []
})

const previews = ref([])

const handleFileChange = (e) => {
  const files = Array.from(e.target.files)
  const totalFiles = form.value.foto.length + files.length

  if (totalFiles > 6) {
    alert('Maksimal 6 foto!')
    e.target.value = ''
    return
  }

  files.forEach(file => {
    // Validate file size (2MB) and type
    if (file.size > 2 * 1024 * 1024) {
      alert(`File ${file.name} terlalu besar! Maksimal 2MB.`)
      return
    }
    if (!['image/jpeg', 'image/png', 'image/jpg'].includes(file.type)) {
      alert(`File ${file.name} harus berupa JPEG atau PNG!`)
      return
    }
    form.value.foto.push(file)
    previews.value.push(URL.createObjectURL(file))
  })

  e.target.value = ''
}

const removeFile = (index) => {
  form.value.foto.splice(index, 1)
  previews.value.splice(index, 1)
}

const konfirmasi = async () => {
  try {
    // Basic client-side validation
    if (!form.value.nama_pemesan || !form.value.email || !form.value.no_tlpn) {
      alert('Harap isi semua kolom wajib (Nama Pemesan, Email, No Telepon, Template)!')
      return
    }

    const data = new FormData()
    data.append('nama_pemesan', form.value.nama_pemesan)
    data.append('email', form.value.email)
    data.append('no_tlpn', form.value.no_tlpn)
    data.append('template_slug', "undangan-pernikahan-premium")
    data.append('form', JSON.stringify(form.value.form))

    form.value.foto.forEach((file, index) => {
      data.append(`foto[${index}]`, file)
    })

    console.log([...data]) // untuk debugging

    const res = await fetch('http://localhost:8000/api/pelanggans', {
      method: 'POST',
      body: data
    })

    const result = await res.json()

    if (!res.ok) {
      if (res.status === 422) {
        const errors = result.errors || {}
        const errorMessages = Object.values(errors).flat().join('\n')
        throw new Error(errorMessages || result.message || 'Validasi gagal')
      }
      throw new Error(result.message || 'Gagal mengirim data')
    }

    alert(result.message || 'Data berhasil disimpan!')
    router.push('/')
  } catch (err) {
    console.error(err)
    alert('Terjadi kesalahan: ' + err.message)
  }
}

const batal = () => router.back()
</script>
