<template>
    <v-card class="bulk-actions-bar" elevation="6">
        <DevIndexBadge :index="20" label="BulkActionsBar" :dialog-mode="true" style="top: 4px; right: 4px" />
        <v-card-text class="d-flex align-center gap-3 flex-wrap">
            <strong>Выбрано: {{ store.selectedIds.size }}</strong>

            <v-divider vertical />

            <v-btn color="primary" variant="outlined" data-testid="bulk-regions" @click="regionsOpen = true">
                🌍 Регионы…
            </v-btn>
            <v-btn color="primary" variant="outlined" data-testid="bulk-days" @click="daysOpen = true">
                📅 Дни сбора…
            </v-btn>
            <v-btn color="primary" variant="outlined" data-testid="bulk-limit" @click="limitOpen = true">
                🎯 Лимит лидов…
            </v-btn>

            <v-divider vertical />

            <v-btn color="warning" prepend-icon="mdi-pause" data-testid="bulk-pause" @click="confirmAndRun('pause')">
                Приостановить
            </v-btn>
            <v-btn color="success" prepend-icon="mdi-play" data-testid="bulk-resume" @click="confirmAndRun('resume')">
                Возобновить
            </v-btn>

            <v-divider vertical />

            <v-btn
                color="error"
                prepend-icon="mdi-archive"
                data-testid="bulk-archive"
                @click="confirmAndRun('archive')"
            >
                Архивировать
            </v-btn>

            <v-spacer />
            <v-btn variant="text" data-testid="bulk-clear" @click="store.clearSelection">Снять выбор</v-btn>
        </v-card-text>

        <RegionsBulkDialog
            v-model="regionsOpen"
            :count="store.selectedIds.size"
            @apply="(p) => runBulk({ action: 'update_regions', ...p })"
        />
        <DaysBulkDialog
            v-model="daysOpen"
            :count="store.selectedIds.size"
            @apply="(p) => runBulk({ action: 'update_days', ...p })"
        />
        <LimitBulkDialog
            v-model="limitOpen"
            :count="store.selectedIds.size"
            @apply="(p) => runBulk({ action: 'update_limit', ...p })"
        />
    </v-card>
</template>

<script setup lang="ts">
import { ref } from 'vue';
import { useProjectsStore } from '../../stores/projectsStore';
import DevIndexBadge from '../DevIndexBadge.vue';
import RegionsBulkDialog from './RegionsBulkDialog.vue';
import DaysBulkDialog from './DaysBulkDialog.vue';
import LimitBulkDialog from './LimitBulkDialog.vue';

const store = useProjectsStore();

const regionsOpen = ref(false);
const daysOpen = ref(false);
const limitOpen = ref(false);

const messages: Record<string, string> = {
    pause: 'Приостановить выбранные проекты?',
    resume: 'Возобновить выбранные проекты?',
    archive:
        'Архивировать выбранные проекты?\nДействие необратимо в Plan 5 (восстановление потребует ручного запроса).',
};

async function confirmAndRun(action: 'pause' | 'resume' | 'archive') {
    if (!window.confirm(messages[action])) return;
    await runBulk({ action });
}

async function runBulk(payload: Parameters<typeof store.bulkUpdate>[0]) {
    const result = await store.bulkUpdate(payload);
    if (result.skipped.length > 0) {
        window.alert(
            `Применено: ${result.updated}. Пропущено: ${result.skipped.length} (конфликт с уже доставленными лидами).`,
        );
    }
}

defineExpose({ regionsOpen, daysOpen, limitOpen });
</script>

<style scoped>
.bulk-actions-bar {
    position: fixed;
    bottom: 24px;
    left: 50%;
    transform: translateX(-50%);
    z-index: 10;
    max-width: calc(100vw - 48px);
}
</style>
