import { v4 as uuidv4 } from 'uuid'
// Tato funkce generuje jedinečná ID událostí, která zůstávají zachována i po obnovení stránky nebo přihlášení/odhlášení
// zabraňuje tak duplicitním ID.
export function createEventId() {
  // Generuje náhodný unikátní identifikátor
  return uuidv4()
}

// Funkce pro získání a vytvoření datumů svátků na dalších 30 let
export function getHolidays() {
  const holidays = new Set()
  const currentYear = new Date().getFullYear()

  for (let year = currentYear; year <= currentYear + 30; year++) {
    ;[
      `${year}-05-01`,
      `${year}-05-08`,
      `${year}-07-05`,
      `${year}-07-06`,
      `${year}-09-28`,
      `${year}-10-28`,
      `${year}-11-17`,
      `${year}-12-24`,
      `${year}-12-25`,
      `${year}-12-26`,
      `${year + 1}-01-01`
    ].forEach((date) => holidays.add(date))
  }
  return holidays
}

// Funkce pro zobrazení toast notifikace na místě kurzoru
let mouseX = 0
let mouseY = 0
document.addEventListener('mousemove', function (event) {
  mouseX = event.clientX
  mouseY = event.clientY
})

export function showToastAtCursor(message, title) {
  window.toastr.warning(message, title, {
    closeButton: true,
    progressBar: false,
    preventDuplicates: false,
    newestOnTop: true,
    positionClass: 'toast-top-left',
    timeOut: 2000,
    extendedTimeOut: 1500,
    hideDuration: 0,
    onShown: function () {
      // Získá poslední toastr notifikaci a upraví jeho pozici
      setTimeout(() => {
        let toastElement = document.querySelector('.toast')
        if (toastElement) {
          toastElement.style.position = 'absolute'
          toastElement.style.left = `${mouseX}px`
          toastElement.style.top = `${mouseY}px`
        }
      }, 0)
    }
  })
}

export function showToast(message, title) {
  window.toastr.warning(message, title, {
    closeButton: true,
    progressBar: false,
    preventDuplicates: true,
    positionClass: 'toast-top-center',
    timeOut: 0,
    tapToDismiss: true
  })
}

export function showToastAtCursorOverlap() {
  showToastAtCursor('Vybraný časový slot se překrývá již s existujícím eventem', 'Upozornění!')
}
export function showToastAtCursorHoliday() {
  showToastAtCursor('Máte zapsané již 2 víkendy/svátky tento měsíc', 'Upozornění!')
}

export function showToastAtCursorLong() {
  showToastAtCursor('Můžete vybrat pouze jednu směnu v rámci 1 dne najednou', 'Upozornění!')
}

export function showToastAtCursorRecurring() {
  showToastAtCursor('Jedná se o opakující se událost, která se nedá přesunout', 'Upozornění!')
}

export function showToastAtCursorForbidden() {
  showToastAtCursor('Nemáte oprávnění k odstranění této události', 'Upozornění')
}

export function showToastAtCursorWarningAddAfter() {
  showToastAtCursor(
    'Události pro příští měsíc lze vytvářet pouze před 15. dnem aktuálního měsíce!',
    'Upozornění'
  )
}

export function showToastAtCursorWarningAddPrev() {
  showToastAtCursor(
    'Události nelze vytvářet pro aktuální měsíc ani pro minulé měsíce!',
    'Upozornění'
  )
}

export function showToastAtCursorWarningChangeAfter() {
  showToastAtCursor(
    'Události pro příští měsíc lze měnit pouze před 15. dnem aktuálního měsíce!',
    'Upozornění'
  )
}

export function showToastAtCursorWarningChangePrev() {
  showToastAtCursor(
    'Události nelze přesouvat pro aktuální měsíc ani pro minulé měsíce!',
    'Upozornění'
  )
}

export function showToastAtCursorWarningDelAfter() {
  showToastAtCursor(
    'Události pro příští měsíc lze odstraňovat pouze před 15. dnem aktuálního měsíce!',
    'Upozornění'
  )
}

export function showToastAtCursorWarningDelPrev() {
  showToastAtCursor(
    'Události nelze již odstraňovat pro aktuální měsíc ani pro minulé měsíce!',
    'Upozornění'
  )
}

export function showToastAtCursorWarningGroupLimit() {
  showToastAtCursor('Skupina je již plná! Vyberte jinou skupinu.', 'Upozornění')
}

export function showToastAtCursorWarningHours() {
  showToastAtCursor('Máte již vybraný maximální počet směn na tento měsíc.', 'Upozornění')
}

export function showToastAtCursorWarningMonthMove() {
  showToastAtCursor('Není možné přesouvat smeny mezi jednotlivými měsíci.', 'Upozornění')
}

export function showToastAtCursorWarningAdminMove() {
  showToastAtCursor(
    'Interakce v rozvrhu jsou zakázané při zobrazení celkového rozvrhu',
    'Upozornění'
  )
}

export function showToastAtCursorWarningAutoFillFull() {
  showToastAtCursor('Nebyly nalezeny žádné volné volné datumy pro tento měsíc!', 'Upozornění')
}

export function showToastAtCursorWarningAutoFillFull2() {
  showToastAtCursor('Byl dosažen limit událostí pro tento měsíc!', 'Upozornění')
}

export function showToastGroup() {
  showToast(
    'Nejste zařazeni v žádné skupině, systém dá vědět adminovi, aby Vás zařadil!',
    'Upozornění!'
  )
}

export function showToastGroupAdmin() {
  showToast(
    'Někteří uživatelé nejsou zařazeni v žádné skupině, ujistěte se, že skupina Nezařazení je prázdná!',
    'Upozornění!'
  )
}
