<template>
  <Dropdown
    :model-value="modelValue"
    :options="options"
    option-label="label"
    option-value="value"
    placeholder="Интервал"
    class="tw:w-[14rem] tw:shrink-0"
    @update:model-value="$emit('update:modelValue', $event ?? '')"
  />
</template>

<script setup>
import { computed } from 'vue';
import Dropdown from 'primevue/dropdown';

const props = defineProps({
  modelValue: {
    type: String,
    default: '',
  },
});

defineEmits(['update:modelValue']);

/** Пресеты интервалов (label — для отображения, value — cron expression) */
const PRESETS = [
  { label: 'Раз в минуту', value: '* * * * *' },
  { label: 'Раз в 5 минут', value: '*/5 * * * *' },
  { label: 'Раз в 10 минут', value: '*/10 * * * *' },
  { label: 'Раз в час', value: '0 * * * *' },
  { label: 'Раз в 3 часа', value: '0 */3 * * *' },
  { label: 'Раз в 6 часов', value: '0 */6 * * *' },
  { label: 'Раз в сутки', value: '0 0 * * *' },
  { label: 'Раз в неделю', value: '0 0 * * 0' },
];

const presetValues = new Set(PRESETS.map((p) => p.value));

/** Только пресеты; если текущее значение не из списка — показываем его в списке (уже сохранённое в БД), чтобы не терять отображение */
const options = computed(() => {
  const current = props.modelValue ?? '';
  if (!current || presetValues.has(current)) {
    return PRESETS;
  }
  return [{ label: current, value: current }, ...PRESETS];
});
</script>
