<template>
  <AppLayout>
    <div class="flex justify-between items-center mb-6">
      <h1 class="text-2xl font-bold text-gray-900">Restaurants</h1>
      <button @click="openModal('create')" class="btn-primary">+ Add Restaurant</button>
    </div>

    <div class="card overflow-x-auto">
      <table class="min-w-full divide-y divide-gray-200">
        <thead class="bg-gray-50">
          <tr>
            <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">ID</th>
            <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Name</th>
            <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Login</th>
            <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Host</th>
            <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Created</th>
            <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Actions</th>
          </tr>
        </thead>
        <tbody class="divide-y divide-gray-200">
          <tr v-for="rest in restaurants" :key="rest.id">
            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">{{ rest.id }}</td>
            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">{{ rest.name }}</td>
            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">{{ rest.login }}</td>
            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">{{ rest.host }}</td>
            <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">{{ formatDate(rest.created) }}</td>
            <td class="px-6 py-4 whitespace-nowrap text-sm space-x-2">
              <button @click="openModal('edit', rest)" class="text-blue-600 hover:text-blue-800">Edit</button>
              <button @click="deleteRestaurant(rest.id)" class="text-red-600 hover:text-red-800">Delete</button>
            </td>
          </tr>
        </tbody>
      </table>
    </div>

    <!-- Modal -->
    <div v-if="modalOpen" class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50">
      <div class="bg-white rounded-lg p-6 w-full max-w-md">
        <h2 class="text-xl font-bold mb-4">{{ modalTitle }}</h2>
        <form @submit.prevent="submitRestaurant">
          <div class="mb-4">
            <label class="block text-sm font-medium text-gray-700">Name</label>
            <input v-model="form.name" type="text" required class="input-field mt-1" />
          </div>
          <div class="mb-4">
            <label class="block text-sm font-medium text-gray-700">Login</label>
            <input v-model="form.login" type="text" required class="input-field mt-1" />
          </div>
          <div class="mb-4">
            <label class="block text-sm font-medium text-gray-700">Password</label>
            <input v-model="form.password" :required="modalMode === 'create'" type="password" class="input-field mt-1" />
            <p v-if="modalMode === 'edit'" class="text-xs text-gray-500 mt-1">Leave blank to keep current password</p>
          </div>
          <div class="mb-4">
            <label class="block text-sm font-medium text-gray-700">Host</label>
            <input v-model="form.host" type="text" required class="input-field mt-1" />
          </div>
          <div class="flex justify-end space-x-2">
            <button type="button" @click="closeModal" class="btn-secondary">Cancel</button>
            <button type="submit" class="btn-primary">Save</button>
          </div>
        </form>
      </div>
    </div>
  </AppLayout>
</template>

<script setup lang="ts">
import { ref, onMounted } from 'vue';
import AppLayout from '../components/Layout/AppLayout.vue';

const restaurants = ref([]);
const modalOpen = ref(false);
const modalMode = ref<'create' | 'edit'>('create');
const form = ref({ id: null, name: '', login: '', password: '', host: '' });
const modalTitle = ref('');

async function loadRestaurants() {
  const res = await fetch('/api/admin/restaurants');
  restaurants.value = await res.json();
}

function formatDate(dateStr: string) {
  if (!dateStr) return '-';
  return new Date(dateStr).toLocaleString();
}

function openModal(mode: 'create' | 'edit', rest: any = null) {
  modalMode.value = mode;
  if (mode === 'create') {
    form.value = { id: null, name: '', login: '', password: '', host: '' };
    modalTitle.value = 'Create Restaurant';
  } else {
    form.value = { id: rest.id, name: rest.name, login: rest.login, password: '', host: rest.host };
    modalTitle.value = 'Edit Restaurant';
  }
  modalOpen.value = true;
}

function closeModal() {
  modalOpen.value = false;
}

async function submitRestaurant() {
  try {
    const payload = {
      name: form.value.name,
      login: form.value.login,
      host: form.value.host,
      ...(form.value.password ? { password: form.value.password } : {})
    };
    if (modalMode.value === 'create') {
      await fetch('/api/admin/restaurants', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify(payload)
      });
    } else {
      await fetch(`/api/admin/restaurants/${form.value.id}`, {
        method: 'PUT',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify(payload)
      });
    }
    await loadRestaurants();
    closeModal();
  } catch (e) {
    alert('Operation failed');
  }
}

async function deleteRestaurant(id: number) {
  if (confirm('Are you sure?')) {
    await fetch(`/api/admin/restaurants/${id}`, { method: 'DELETE' });
    await loadRestaurants();
  }
}

onMounted(loadRestaurants);
</script>
