<template>
  <SettingsItem label="Режим работы планировщика">
    <template #default>
      <SelectButton
        v-model="settings.items.cron.mode"
        :options="cronModes"
        optionLabel="label"
        optionValue="value"
        :allowEmpty="false"
      />
    </template>
    <template #help>
      <div v-if="settings.items.cron.mode === 'disabled'" class="tw:text-red-600 tw:font-bold">
        Все фоновые задачи отключены.
      </div>
      <div v-else>
        Рекомендуемый режим. Использует системный планировщик задач Linux.
      </div>

      <div class="tw:mt-2">
        <p>
          <strong>Системный CRON (рекомендуется):</strong> Стабильное выполнение задач по расписанию, независимо от
          посещаемости сайта. Добавьте команду в CRON для автоматического выполнения каждые 5 минут.
        </p>
        <p>
          <strong>Выключено:</strong> Все фоновые задачи отключены. Планировщик не будет выполнять никаких задач.
        </p>
      </div>
    </template>
  </SettingsItem>

  <SettingsItem label="Последний запуск CRON">
    <template #default>
      <div v-if="lastRunDate" class="tw:text-green-600 tw:font-bold tw:py-2">
        {{ lastRunDate }}
      </div>
      <div v-else class="tw:text-gray-500 tw:py-2">
        Еще не запускался
      </div>
    </template>
    <template #help>
      Время последнего успешного выполнения планировщика задач.
    </template>
  </SettingsItem>

  <SettingsItem
    v-if="settings.items.cron.mode === 'system'"
    label="Команда для CRON"
  >
    <template #default>
      <InputGroup>
        <Button icon="fa fa-copy" severity="secondary" @click="copyToClipboard(cronCommand)"/>
        <InputText readonly :model-value="cronCommand" class="tw:w-full"/>
      </InputGroup>
    </template>
    <template #help>
      Добавьте эту строку в конфигурацию CRON на вашем сервере (обычно `crontab -e`), чтобы запускать планировщик каждые
      5 минут.
    </template>
  </SettingsItem>
</template>

<script setup>
import {computed} from 'vue';
import {useSettingsStore} from "@/stores/settings.js";
import SettingsItem from "@/components/SettingsItem.vue";
import SelectButton from "primevue/selectbutton";
import InputText from "primevue/inputtext";
import Button from "primevue/button";
import InputGroup from 'primevue/inputgroup';
import {toastBus} from "@/utils/toastHelper.js";

const settings = useSettingsStore();

const cronModes = [
  {value: 'system', label: 'Системный CRON (Linux)'},
  {value: 'disabled', label: 'Выключено'},
];

const cronCommand = computed(() => {
  const cliPath = settings.items.cron?.cli_path;

  return cliPath
    ? `*/5 * * * * php ${cliPath} schedule:run`
    : 'Путь не определен. Проверьте конфигурацию модуля.';
});

const lastRunDate = computed(() => settings.items.cron?.last_run);

async function copyToClipboard(text) {
  try {
    await navigator.clipboard.writeText(text);
    toastBus.emit('show', {
      severity: 'success',
      summary: 'Скопировано',
      detail: 'Команда скопирована в буфер обмена',
      life: 2000,
    });
  } catch (err) {
    toastBus.emit('show', {
      severity: 'error',
      summary: 'Ошибка',
      detail: 'Не удалось скопировать текст',
      life: 2000,
    });
  }
}
</script>
