@use "sass:math";
@use "sass:color";
@use "colors" as *;
@use "../colors" as *;
@use "sizes" as *;
@use "../sizes" as *;
@use "../toolbar/sizes" as *;
@use '../../base/scheduler/layout/header' as *;
@use "../../base/mixins" as *;
@use "../../base/icon_fonts" as *;
@use "../../base/scheduler" as baseScheduler with (
  $scheduler-tooltip-appointment-text-color: $scheduler-tooltip-appointment-text-color,
  $scheduler-appointment-overlay-bg: $scheduler-appointment-overlay-bg,
  $scheduler-appointment-base-color: $scheduler-appointment-base-color,
  $scheduler-appointment-start-color: $scheduler-appointment-start-color,
  $scheduler-base-border-color: $scheduler-base-border-color,
  $scheduler-accent-border-color: $scheduler-accent-border-color,
  $scheduler-current-time-cell-color: $scheduler-current-time-cell-color,
  $scheduler-time-indicator-color: $scheduler-time-indicator-color,
  $scheduler-time-indicator-background-color: $scheduler-time-indicator-background-color,
  $scheduler-workspace-background-color: $scheduler-workspace-background-color,
  $scheduler-other-month-cell-opacity: $scheduler-other-month-cell-opacity,
  $scheduler-workspace-month-text-color: $scheduler-workspace-month-text-color,
  $scheduler-workspace-accent-color: $scheduler-workspace-accent-color,
  $scheduler-first-month-cell-background-color: $scheduler-first-month-cell-background-color,
  $scheduler-panel-text-color: $scheduler-panel-text-color,
  $scheduler-left-column-width: $scheduler-left-column-width,
  $scheduler-timeline-cell-height: $scheduler-timeline-cell-height,
  $scheduler-workspace-active-cell-color: $scheduler-workspace-active-cell-color,
  $scheduler-workspace-hovered-cell-color: $scheduler-workspace-hovered-cell-color,
  $scheduler-workspace-focused-cell-color: $scheduler-workspace-focused-cell-color,
  $scheduler-droppable-cell-background-color: $scheduler-droppable-cell-background-color,
  $scheduler-appointment-text-color: $scheduler-appointment-text-color,
  $scheduler-fill-focused-appointment: $scheduler-fill-focused-appointment,
  $scheduler-is-shadow-color-for-focused-state: $scheduler-is-shadow-color-for-focused-state,
  $scheduler-dd-appointment-hover-text-color: $scheduler-dd-appointment-hover-text-color,

  $agenda-appointment-recurrence-icon-color: $agenda-appointment-recurrence-icon-color,
  $agenda-appointment-hover-bg: $agenda-appointment-hover-bg,
  $agenda-appointment-active-bg: $agenda-appointment-active-bg,
  $agenda-appointment-text-color: $agenda-appointment-text-color,
  $agenda-appointment-title-font-size: $agenda-appointment-title-font-size,

  $scheduler-appointment-popup-icon-margin-top: $generic-scheduler-appointment-popup-icon-margin-top,
  $scheduler-appointment-popup-repeat-end-item-height: $generic-scheduler-appointment-popup-repeat-end-item-height,
  $scheduler-appointment-popup-repeat-end-item-vertical-margin: $generic-scheduler-appointment-popup-repeat-end-radio-margin-top
);
@use "../button/colors" as *;
@use "../tooltip/colors" as *;
@use "../typography/sizes" as *;

// adduse
@use "../recurrenceEditor" as *;
@use "../scrollable";

$generic-scheduler-appointment-reduced-content-padding: 40px;
$generic-scheduler-appointment-empty-transparent-border: 1px solid transparent;

$generic-scheduler-all-day-table-cell-height: $generic-scheduler-workspace-date-table-cell-height * 1.5;
$generic-scheduler-collapsed-all-day-table-cell-height: $generic-scheduler-workspace-date-table-cell-height * 0.5;
$generic-scheduler-header-panel-table-cell-height: $generic-scheduler-workspace-date-table-cell-height;

$generic-scheduler-current-time-cell-border-size: 2px;

$generic-scheduler-month-date-text-size: $generic-h5-font-size;

$scheduler-first-of-month-border: 1px solid $scheduler-first-month-border-color;

$generic-scheduler-agenda-time-cell-padding: 10px;
$generic-scheduler-agenda-group-header-padding: $generic-scheduler-agenda-time-cell-padding 0 0 10px;

@include baseScheduler.scheduler-mixin();

.dx-scheduler-time-panel-cell {
  height: $generic-scheduler-workspace-date-table-cell-height;

  &.dx-scheduler-time-panel-current-time-cell::before {
    content: '';
  }

  &::after {
    content: '';
  }
}

.dx-scheduler-date-table-cell {
  height: $generic-scheduler-workspace-date-table-cell-height;
}

.dx-scheduler-all-day-title {
  display: flex;
  align-items: center;
  justify-content: center;
  height: $generic-scheduler-all-day-table-cell-height;
  font-size: $generic-scheduler-all-day-title-font-size;
  font-weight: bold;

  .dx-scheduler-work-space-all-day-collapsed & {
    height: $generic-scheduler-collapsed-all-day-table-cell-height;
  }
}

.dx-scheduler-all-day-table {
  height: $generic-scheduler-all-day-table-cell-height;

  .dx-scheduler-work-space-all-day-collapsed & {
    height: $generic-scheduler-collapsed-all-day-table-cell-height;
  }
}

.dx-scheduler-header-panel-cell {
  height: $generic-scheduler-header-panel-table-cell-height;

  &.dx-scheduler-header-panel-current-time-cell {
    &::before {
      top: $generic-scheduler-header-panel-table-cell-height - $generic-scheduler-current-time-cell-border-size - 1;
      height: $generic-scheduler-current-time-cell-border-size;
    }
  }
}

.dx-scheduler-timeline {
  .dx-scheduler-date-table-cell {
    height: $generic-scheduler-timeline-date-table-cell-height;
  }
}

.dx-scheduler-work-space-day {
  .dx-scheduler-header-panel {
    .dx-scheduler-group-row {
      &:not(:first-child) {
        border-bottom: none;
      }
    }
  }
}

.dx-scheduler-work-space-month {
  .dx-scheduler-appointment-content {
    font-size: $generic-scheduler-appointment-month-text-size;
  }

  .dx-scheduler-date-table-first-of-month {
    border-left: $scheduler-first-of-month-border;
    border-top: $scheduler-first-of-month-border;
  }

  .dx-scheduler-date-table-scrollable .dx-scrollable-content {
    min-height: 300px;
  }
}

.dx-scheduler-header {
  @include header-sizes(
    $generic-scheduler-header-height,
    $generic-scheduler-header-offset,
    $generic-scheduler-toolbar-item-offset,
  );

  background-color: $scheduler-header-bg;
}

.dx-scheduler-header-panel { // stylelint-disable-line no-duplicate-selectors
  .dx-scheduler-group-row {
    &:not(:first-child) {
      border-bottom: baseScheduler.$scheduler-base-border;

      .dx-scheduler-group-header {
        color: $scheduler-panel-text-color;
      }
    }
  }
}

.dx-scheduler-header-panel,
.dx-scheduler-work-space-vertical-group-table,
.dx-scheduler-group-flex-container {
  .dx-scheduler-group-header {
    font-weight: bold;
    color: $scheduler-group-header-color;
    padding: 0;
  }
}

.dx-scheduler-all-day-panel {
  background-color: $scheduler-alldaypanel-bg;
}

.dx-scheduler-work-space { // stylelint-disable-line no-duplicate-selectors
  &.dx-scheduler-work-space-grouped {
    .dx-scheduler-all-day-title {
      border-top: baseScheduler.$scheduler-base-border;
    }

    &.dx-scheduler-agenda {
      .dx-scheduler-date-table-cell {
        border: none;
      }
    }

    &.dx-scheduler-timeline .dx-scheduler-group-row th {
      .dx-rtl & {
        border-left: none;
        border-right: none;
      }
    }
  }
}

.dx-scheduler-work-space-week {
  .dx-scheduler-date-table-row:first-child {
    border-top: none;
  }
}

.dx-scheduler-all-day-table-cell,
.dx-scheduler-date-table-cell {
  &.dx-state-active {
    background-color: $scheduler-cell-active-bg;
  }

  &.dx-state-hover {
    background-color: $scheduler-cell-hover-bg;
    color: $scheduler-workspace-hovered-cell-color;
  }
}

.dx-scheduler-legacy-appointment-popup {
  .dx-popup-title {
    background-color: $scheduler-popup-title-bg;

    .dx-closebutton,
    .dx-closebutton.dx-rtl {
      margin: 0;
    }
  }

  .dx-popup-bottom {
    border-top: 1px solid $scheduler-appointment-form-separator-color;
  }

  .dx-toolbar-after {
    margin-right: 4px;

    .dx-rtl & {
      margin-left: 4px;
      margin-right: 0;
    }
  }
}

.dx-scheduler-appointment-popup {
  > .dx-overlay-content > .dx-toolbar.dx-widget {
    > .dx-toolbar-items-container {
      height: $generic-scheduler-appointment-popup-toolbar-height;
    }

    .dx-toolbar-label {
      font-size: $generic-scheduler-appointment-popup-toolbar-label-size;
    }
  }

  .dx-form {
    .dx-scheduler-form-icon {
      color: $scheduler-form-icon-color;

      &.dx-field-item {
        height: $generic-scheduler-appointment-popup-icon-container-height;
        padding-inline-end: $generic-scheduler-appointment-popup-icon-padding-right;

        .dx-icon {
          font-size: $generic-scheduler-appointment-popup-icon-size;
        }
      }

      &.dx-scheduler-form-inner-label-offset {
        margin-top: $generic-scheduler-appointment-popup-icon-inner-label-margin-top;
      }
    }

    .dx-scheduler-form-icon-sized-gap {
      width: $generic-scheduler-appointment-popup-icon-size;
    }

    .dx-scheduler-form-subject-group .dx-scheduler-form-icon {
      color: $scheduler-appointment-base-color;
    }

    .dx-scheduler-days-of-week-buttons {
      height: $generic-toolbar-height;
      gap: $generic-scheduler-appointment-popup-days-of-week-buttons-gap;

      .dx-button {
        width: $generic-scheduler-appointment-popup-days-of-week-button-size;
        height: $generic-scheduler-appointment-popup-days-of-week-button-size;
        min-width: $generic-scheduler-appointment-popup-days-of-week-button-size;
        min-height: $generic-scheduler-appointment-popup-days-of-week-button-size;
      }
    }

    .dx-scheduler-form-recurrence-end-group .dx-radiogroup.dx-widget {
      .dx-radiobutton {
        margin-top: $generic-scheduler-appointment-popup-repeat-end-radio-margin-top;
        margin-bottom: 0;
      }
    }

    .dx-field-item:not(.dx-first-col) {
      padding-inline-start: $generic-scheduler-appointment-popup-item-padding-horizontal;
    }

    .dx-field-item:not(.dx-last-col) {
      padding-inline-end: $generic-scheduler-appointment-popup-item-padding-horizontal;
    }

    .dx-field-item:not(.dx-first-row) {
      padding-top: $generic-scheduler-appointment-popup-item-padding-top;
    }

    .dx-scheduler-form-all-day-switch.dx-field-item.dx-label-h-align {
      height: $generic-scheduler-appointment-popup-all-day-item-height;

      .dx-field-item-label-text {
        color: $base-text-color;
      }
    }
  }
}

.dx-scheduler-legacy-appointment-popup .dx-form-validation-summary {
  padding: 10px 20px;
}

.dx-scheduler-work-space-month .dx-scheduler-date-table-cell {
  font-size: $generic-scheduler-month-date-text-size;
}

.dx-scheduler-header-panel,
.dx-scheduler-time-panel,
.dx-scheduler-group-header {
  font-size: $generic-scheduler-workspace-info-text-size;
}

.dx-scheduler-work-space-grouped .dx-scheduler-group-row th,
.dx-scheduler-work-space.dx-scheduler-work-space-grouped .dx-scheduler-last-group-cell {
  border-right: 1px solid $scheduler-group-separator-border-color;

  &:last-child {
    border-right: none;
  }

  .dx-rtl & {
    border-left: 1px solid $scheduler-group-separator-border-color;
    border-right: baseScheduler.$scheduler-base-border;

    &:last-child {
      border-left: none;
    }
  }
}

.dx-scheduler-work-space-grouped.dx-scheduler-work-space-vertical-grouped,
.dx-scheduler-work-space-grouped.dx-scheduler-timeline {
  .dx-scheduler-group-row th,
  .dx-scheduler-last-group-cell {
    border-right: baseScheduler.$scheduler-base-border;
    border-left: baseScheduler.$scheduler-base-border;
  }
}

.dx-scheduler-work-space-grouped.dx-scheduler-work-space-group-by-date {
  .dx-scheduler-group-row th {
    border-right: baseScheduler.$scheduler-base-border;
    border-left: baseScheduler.$scheduler-base-border;
  }

  .dx-scheduler-header-panel-cell,
  .dx-scheduler-group-header.dx-scheduler-last-group-cell,
  .dx-scheduler-date-table-cell.dx-scheduler-last-group-cell {
    border-right: 1px solid $scheduler-group-separator-border-color;

    &:last-child {
      border-right: none;
    }

    .dx-rtl & {
      border-left: 1px solid $scheduler-group-separator-border-color;
      border-right: baseScheduler.$scheduler-base-border;

      &:last-child {
        border-left: none;
      }
    }
  }
}

.dx-scheduler-appointment-collector {
  height: $generic-scheduler-dropdown-button-height;
  margin: $generic-scheduler-dropdown-button-margin;

  &.dx-state-hover {
    &::before {
      border-radius: $generic-scheduler-dropdown-button-height;
    }
  }

  &.dx-button.dx-button-default {
    border-radius: $generic-scheduler-dropdown-button-height;
  }
}

.dx-scheduler-adaptive {
  .dx-scheduler-appointment-collector {
    margin: $generic-scheduler-dropdown-button-adaptive-margin;
  }

  .dx-scheduler-work-space.dx-scheduler-work-space-day,
  .dx-scheduler-work-space.dx-scheduler-work-space-week,
  .dx-scheduler-work-space.dx-scheduler-work-space-work-week {
    .dx-scheduler-fixed-appointments,
    .dx-scheduler-date-table-container {
      .dx-scheduler-appointment-collector {
        margin: $generic-scheduler-dropdown-button-adaptive-vertical-margin;
      }
    }
  }
}

.dx-scheduler:not(.dx-scheduler-adaptive) {
  .dx-scheduler-work-space.dx-scheduler-work-space-day,
  .dx-scheduler-work-space.dx-scheduler-work-space-week,
  .dx-scheduler-work-space.dx-scheduler-work-space-work-week {
    .dx-scheduler-fixed-appointments,
    .dx-scheduler-date-table-container {
      .dx-scheduler-appointment-collector {
        margin: $generic-scheduler-dropdown-button-vertical-margin;
      }
    }
  }

  .dx-scheduler-work-space.dx-scheduler-work-space-month {
    .dx-scheduler-appointment-collector {
      margin-right: 33px;
    }
  }

  .dx-scheduler-work-space.dx-scheduler-work-space-month.dx-scheduler-work-space-count {
    .dx-scheduler-appointment-collector {
      margin-right: 57px;
    }
  }
}

.dx-scheduler-appointment {
  border-left: $generic-scheduler-appointment-transparent-left-border;
  border-right: $generic-scheduler-appointment-transparent-right-border;

  &.dx-state-focused {
    color: $scheduler-appointment-focus-color;
  }

  &.dx-scheduler-appointment-empty {
    border-left: $generic-scheduler-appointment-empty-transparent-border;
    border-right: $generic-scheduler-appointment-empty-transparent-border;
  }
}

.dx-scheduler-fixed-appointments .dx-draggable-dragging .dx-scheduler-appointment {
  border-right: none;
}

.dx-scheduler-appointment-content {
  padding: $generic-scheduler-appointment-content-padding;
}

.dx-scheduler-appointment-strip {
  display: none;
}

.dx-scheduler-appointment-reduced {
  .dx-scheduler-appointment-content {
    padding-right: $generic-scheduler-appointment-reduced-content-padding;
  }
}

.dx-scheduler-appointment-recurrence {
  .dx-scheduler-appointment-content {
    padding: $generic-scheduler-appointment-recurrence-content-padding;

    .dx-rtl & {
      padding: $generic-scheduler-appointment-recurrence-content-padding-rtl;
    }
  }
}

.dx-scheduler-dropdown-appointment-date {
  color: $scheduler-dropdown-appointment-date-color;
}

.dx-scheduler-work-space-both-scrollbar {
  .dx-scheduler-all-day-title {
    background-color: $scheduler-alldaypanel-bg;
  }
}

.dx-scheduler-agenda {
  .dx-scheduler-group-header {
    font-size: $generic-scheduler-group-header-agenda-font-size;
    width: $generic-scheduler-group-header-table-cell-width;
  }

  .dx-scheduler-group-header-content {
    width: $generic-scheduler-group-header-table-cell-width;
    padding: $generic-scheduler-agenda-group-header-padding;
    box-shadow: inset 0 -1px 0 0 $scheduler-accent-border-color;
  }

  .dx-scheduler-time-panel-cell {
    padding-top: $generic-scheduler-agenda-time-cell-padding;
    padding-left: $generic-scheduler-agenda-time-cell-padding;
    padding-right: 0;

    .dx-rtl & {
      padding-right: $generic-scheduler-agenda-time-cell-padding;
      padding-left: 0;
    }
  }

  .dx-scheduler-group-header-content,
  .dx-scheduler-time-panel-cell {
    text-align: left;

    .dx-rtl & {
      text-align: right;
    }
  }

  .dx-scheduler-time-panel-cell,
  .dx-scheduler-date-table-cell {
    box-shadow: inset 0 -1px 0 0 $scheduler-base-border-color;
  }

  .dx-scheduler-date-table-last-row {
    .dx-scheduler-time-panel-cell,
    .dx-scheduler-date-table-cell {
      box-shadow: inset 0 -1px 0 0 $scheduler-accent-border-color;
    }
  }
}

.dx-scheduler-agenda-nodata {
  font-size: $generic-scheduler-workspace-info-text-size;
}

.dx-scheduler-appointment-tooltip-wrapper .dx-overlay-content .dx-popup-content .dx-list-item {
  border-top-width: 1px;
}

.dx-scheduler .dx-scheduler-overlay-panel {
  .dx-overlay-content {
    background: $base-bg;
  }
}

.dx-scheduler-work-space-day,
.dx-scheduler-work-space-week,
.dx-scheduler-work-space-work-week {
  .dx-scheduler-appointment {
    container-type: size;

    &.dx-scheduler-appointment-recurrence {
      @container (max-height: #{$generic-scheduler-appointment-15min-height}) {
        .dx-item-content.dx-scheduler-appointment-content {
          padding-right: $generic-scheduler-appointment-10min-recurrence-padding-right;
        }
      }

      @container (min-height: #{$generic-scheduler-appointment-15min-height}) and (max-height: #{$generic-scheduler-appointment-20min-height}) {
        .dx-item-content.dx-scheduler-appointment-content {
          padding-right: $generic-scheduler-appointment-15min-recurrence-padding-right;
        }
      }

      @container (min-height: #{$generic-scheduler-appointment-20min-height}) and (max-height: #{$generic-scheduler-appointment-25min-height}) {
        .dx-item-content.dx-scheduler-appointment-content {
          padding-right: $generic-scheduler-appointment-20min-recurrence-padding-right;
        }
      }
    }

    .dx-item-content.dx-scheduler-appointment-content {
      @container (max-height: #{$generic-scheduler-appointment-25min-height}) {
        display: flex;
        align-items: center;
        padding: $generic-scheduler-appointment-short-content-padding;

        .dx-scheduler-appointment-content-details {
          display: none;
        }

        .dx-scheduler-appointment-recurrence-icon {
          top: 50%;
          transform: translateY(-50%);
        }
      }
    }

    @container (max-height: #{$generic-scheduler-appointment-15min-height}) {
      .dx-item-content.dx-scheduler-appointment-content {
        .dx-scheduler-appointment-title {
          font-size: $generic-scheduler-appointment-10min-title-font-size;
          line-height: $generic-scheduler-appointment-10min-title-line-height;
        }

        .dx-scheduler-appointment-recurrence-icon {
          right: $generic-scheduler-appointment-10min-icon-right;
          font-size: $generic-scheduler-appointment-10min-icon-font-size;
        }
      }
    }

    @container (min-height: #{$generic-scheduler-appointment-15min-height}) and (max-height: #{$generic-scheduler-appointment-20min-height}) {
      .dx-item-content.dx-scheduler-appointment-content {
        .dx-scheduler-appointment-title {
          font-size: $generic-scheduler-appointment-15min-title-font-size;
          line-height: $generic-scheduler-appointment-15min-title-line-height;
        }

        .dx-scheduler-appointment-recurrence-icon {
          right: $generic-scheduler-appointment-15min-icon-right;
          font-size: $generic-scheduler-appointment-15min-icon-font-size;
        }
      }
    }

    @if $size == "compact" {
      @container (max-height: #{$generic-scheduler-appointment-10min-height}) {
        .dx-item-content.dx-scheduler-appointment-content {
          display: none;
        }
      }
    }
  }
}
