<template>
    <div>
        <div class="flex items-center justify-between">
            <h2 class="text-lg font-bold text-neutral-900">Groupes</h2>
            <button
                class="rounded-md bg-primary-500 px-4 py-2 text-sm font-semibold text-white hover:bg-secondary-500"
                @click="openCreate"
            >
                + Ajouter un groupe
            </button>
        </div>

        <div class="mt-6 overflow-x-auto rounded-lg border border-neutral-200">
            <table class="w-full text-left text-sm">
                <thead class="border-b border-neutral-200 bg-neutral-50">
                    <tr>
                        <th class="px-4 py-3 font-semibold text-neutral-700">Titre</th>
                        <th class="px-4 py-3 font-semibold text-neutral-700">Couleur</th>
                        <th class="px-4 py-3 font-semibold text-neutral-700">Description</th>
                        <th class="px-4 py-3 font-semibold text-neutral-700">Actions</th>
                    </tr>
                </thead>
                <tbody>
                    <tr
                        v-for="item in items"
                        :key="item.id"
                        class="cursor-pointer border-b border-neutral-100 hover:bg-neutral-50"
                        @click="openEdit(item)"
                    >
                        <td class="px-4 py-3 font-semibold text-primary-500">{{ item.title }}</td>
                        <td class="px-4 py-3">
                            <span
                                class="inline-block h-6 w-6 rounded-full"
                                :style="{ backgroundColor: item.color }"
                            />
                        </td>
                        <td class="max-w-xs truncate px-4 py-3 text-neutral-700">
                            {{ item.description ?? '—' }}
                        </td>
                        <td class="px-4 py-3">
                            <button
                                class="text-red-500 hover:text-red-700"
                                @click.stop="handleDelete(item.id)"
                            >
                                <Icon name="mdi:delete-outline" size="20" />
                            </button>
                        </td>
                    </tr>
                    <tr v-if="items.length === 0 && !isLoading">
                        <td colspan="4" class="px-4 py-8 text-center text-neutral-400">
                            Aucun groupe trouvé.
                        </td>
                    </tr>
                </tbody>
            </table>
        </div>

        <TaskGroupDrawer
            v-model="drawerOpen"
            :group="selectedItem"
            :project-id="projectId"
            @saved="onSaved"
        />
    </div>
</template>

<script setup lang="ts">
import type { TaskGroup } from '~/services/dto/task-group'
import { useTaskGroupService } from '~/services/task-groups'

const props = defineProps<{
    projectId: number
}>()

const emit = defineEmits<{
    (e: 'updated'): void
}>()

const { getByProject, remove } = useTaskGroupService()
const items = ref<TaskGroup[]>([])
const isLoading = ref(true)
const drawerOpen = ref(false)
const selectedItem = ref<TaskGroup | null>(null)

async function loadItems() {
    isLoading.value = true
    try {
        items.value = await getByProject(props.projectId)
    } finally {
        isLoading.value = false
    }
}

function openCreate() {
    selectedItem.value = null
    drawerOpen.value = true
}

function openEdit(item: TaskGroup) {
    selectedItem.value = item
    drawerOpen.value = true
}

async function handleDelete(id: number) {
    await remove(id)
    await loadItems()
    emit('updated')
}

async function onSaved() {
    await loadItems()
    emit('updated')
}

onMounted(() => {
    loadItems()
})
</script>
