/* ======================================================================== *
 * Copyright 2025 HCL America Inc.                                          *
 * Licensed under the Apache License, Version 2.0 (the "License");          *
 * you may not use this file except in compliance with the License.         *
 * You may obtain a copy of the License at                                  *
 *                                                                          *
 * http://www.apache.org/licenses/LICENSE-2.0                               *
 *                                                                          *
 * Unless required by applicable law or agreed to in writing, software      *
 * distributed under the License is distributed on an "AS IS" BASIS,        *
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
 * See the License for the specific language governing permissions and      *
 * limitations under the License.                                           *
 * ======================================================================== */

@use "sass:map";
@use "../../common/palette";
@use "../../common/themeMap.module";
@use "../../common/typography";

@mixin enchanted-data-grid-generic-styles {
  max-height: calc(93vh - 150px);
  //TO display scroller always on the UI
  -webkit-overflow-scrolling: touch;
  overflow-y: scroll;

  &::-webkit-scrollbar {
    width: 8px;
    -webkit-appearance: none;
  }
  &::-webkit-scrollbar-track {
    background: palette.clr(light, background, paper);
  }
  &::-webkit-scrollbar-thumb {
    background: palette.clr(light, action, active);
    border-radius: 4px;
  }
  &::-webkit-scrollbar-thumb:hover {
    background: palette.clr(light, action, active);
  }
  
  &::part(table-body-container) {
    width: 100%;
    display: flex;
    align-items: center;
    flex-direction: column;
    padding-top: 20vh;
    padding-bottom: 20vh;
  }
  
  &::part(table-container) {
    width: 100%;
    border-collapse: collapse;
    position: relative;
    table-layout: fixed;
  }
  
  &::part(table-row-header-container) {
    padding-top: 10px;
    padding-bottom: 10px;
    box-sizing: border-box;
    width: 100%;
    border-bottom: 1px solid palette.clr(light, border, secondary);
    white-space: nowrap;
    overflow: hidden;
    text-align: left;
    position: sticky;
    top: 0px;
    background-color: palette.clr(light, background, paper);
    display: flex;
    align-items: center;
    z-index: 1;
    color: palette.clr(light, text, primary);
    font-size: 0;
  }

  &::part(table-row-body-container),
  &::part(table-row-body-container-selected),
  &::part(table-row-body-container-disabled)
  {
    width: 100%;
    border-bottom: 1px solid palette.clr(light, border, secondary);
    @include typography.body2;
    white-space: nowrap;
    text-align: left;
    display: flex;
    align-items: center;
    box-sizing: border-box;
    color: palette.clr(light, text, primary);
  }
  
  &::part(table-row-body-container-disabled) {
    cursor: not-allowed;
    color: palette.clr(light, action, disabled);
  }

  &::part(table-row-body-container-selected) {
    background-color: palette.clr(light, action, selectedOpacity);
  }
  

  &::part(table-row-body-container):focus,
  &::part(table-row-body-container-selected):focus,
  &::part(table-row-body-container-hovered):focus {
    outline: 2px solid palette.clr(light, action, focus) !important;
    outline-offset: -2px;
  }

  &::part(table-row-body-container-hovered) {
    width: 100%;
    border-bottom: 1px solid palette.clr(light, border, secondary);
    @include typography.body2;
    white-space: nowrap;
    text-align: left;
    background-color: palette.clr(light, action, hover);
    display: flex;
    align-items: center;
    box-sizing: border-box;
  }
  
  &::part(table-row-body-container-hovered):focus {
    border-radius: 0 !important;
    background-color: palette.clr(light, action, hover);
  }

  &::part(table-cell-container),
  &::part(table-cell-container-multi-lines) {
    display: inline-flex;
    min-width: 0px;
    flex: 1 1 0%;
    padding: 8px 12px;
    box-sizing: border-box;
  }

  &::part(table-cell-container-multi-lines) {
    padding: 5px 12px;
  }
  
  &::part(table-header-container) {
    display: inline-flex;
    -webkit-box-align: center;
    align-items: center;
    padding: 0;
    padding-inline-start: 12px;
    box-sizing: border-box;
  }
  
  &::part(table-header-container):focus, &::part(table-header-container-rtl):focus {
    outline: none;
    box-shadow: none;
  }

  &::part(table-header-container):focus-visible, &::part(table-header-container-rtl):focus-visible {
    outline: none;
    box-shadow: none;
  }

  &::part(table-cell-link){
    margin-inline-end: 12px;
    text-decoration: none;
    color: map.get(themeMap.$enchantedPalette, BLACK70P);
  }

  &::part(table-cell-link):hover{
    margin-inline-end: 12px;
    text-decoration: underline;
  }

  &::part(table-header-container-child) {
    display: flex;
    box-sizing: border-box;
    -webkit-box-align: center;
    align-items: center;
    min-width: 0px;
    flex: 1 1 0%;
  }

  &::part(table-header-text-parent) {
    @include typography.subtitle2;
    overflow: hidden;
    display: flex;
    -webkit-box-align: center;
    align-items: center;
  }

  &::part(table-header-text) {
    margin-inline-end: 8px;
    text-overflow: ellipsis;
    overflow: hidden;
    white-space: nowrap;
  }
  
  &::part(table-result-label) {
    @include typography.body1bold;
    margin: 20px 0 4px 0;
    font-size: 16px;
  }
  
  &::part(table--result-description) {
    @include typography.font-default;
    margin: 0;
  }
  
  &::part(table-loading-text) {
    @include typography.overline;
  }
  
  &::part(table-column-separator) {
    align-items: center;
    margin-inline-start: 12px;
  }

  &::part(table-header-asc-sort-button-hidden) {
    display: none;
  }

  &::part(table-header-desc-sort-button-hidden) {
    display: none;
  }

  &::part(table-select-checkbox) {
    display: none;
  }

  &::part(table-action-icon-button),
  &::part(table-action-icon-button-hidden) {
    line-height: 0;
  }

  &::part(table-action-icon-button) {
    margin-inline-start: 8px;
  }

  &::part(table-action-icon-button-hidden) {
    visibility: hidden;
    pointer-events: none;
  }

  &::part(table-action-icon-button-menu) {
    margin-inline-start: 12px;
  }
  
  &::part(table-select-checkbox-container), &::part(table-select-all-checkbox) {
    padding-inline-start: 12px;
    padding-inline-end: 12px;
    width: 20px;
  }
  
  &::part(table-column-separator-hr) {
    margin: 0px;
    flex-shrink: 0;
    border-width: 0px thin 0px 0px;
    border-style: solid;
    border-color: map.get(themeMap.$enchantedPalette, BLACK32P);
    height: 16px;
  }
  
  // styling  only for authoring use case
  // minus 64px is based on dialog paper width
  &::part(table-column-authoring-0) {
    width: calc((100vw - 64px) / 4);
    max-width: calc((100vw - 64px) / 4);  
    flex: 1;
  }

  &::part(table-column-authoring-1) {
    width: calc((100vw - 64px) / 8);
    max-width: calc((100vw - 64px) / 8);
    flex: 1;
  }

  &::part(table-column-authoring-2) {
    width: calc((100vw - 64px) / 8);
    max-width: calc((100vw - 64px) / 8);
    flex: 1;
  }

  &::part(table-column-authoring-3) {
    width: calc((100vw - 64px) / 8);
    max-width: calc((100vw - 64px) / 8);
    flex: 1;
  }

  &::part(table-column-authoring-4) {
    width: calc((100vw - 64px) / 8);
    max-width: calc((100vw - 64px) / 8);
    flex: 1;
  }

  &::part(table-column-authoring-5) {
    width: calc((100vw - 64px) / 8);
    box-sizing: border-box;
    flex: 1;
  }

  &::part(table-column-picker-0) {
    flex: unset;
    width: 20%;
  }

  &::part(table-column-picker-1) {
    width: 30%;
    flex: unset;
  }

  &::part(table-column-picker-2) {
    width: 10%;
    flex: unset;
  }

  &::part(table-column-picker-3) {
    width: 20%;
    flex: unset;

  }

  &::part(table-column-picker-4) {
    width: 20%;
    flex: unset;
  }

  &::part(table-action-buttons-container) {
    display: flex;
    justify-content: flex-start;
    flex-direction: row;
  }

  &::part(table-column-authoring-0-div),
  &::part(table-column-authoring-1-div),
  &::part(table-column-authoring-2-div),
  &::part(table-column-authoring-3-div),
  &::part(table-column-authoring-4-div),
  &::part(table-column-authoring-5-div) {
    display: flex;
    flex-direction: row;
    width: 100%;
    padding: 0px;
    align-items: center;
    text-align: start;
  }

  &::part(table-column-authoring-0-div-1) {
    width: 95%;
    padding-inline-end: 8px;
    padding: 0px;
    margin-inline-start: 8px;
  }

  &::part(table-column-authoring-0-div-2) {
    width: auto;
    padding: 0px;
  }

  &::part(table-column-authoring-0-div-3) {
    display: flex;
    justify-content: flex-end;
    width: auto;
    padding: 0px;
  }

  &::part(table-column-authoring-0-div-4) {
    display: flex;
    justify-content: flex-start;
    width: 50%;
    padding: 0px;
  }

  &::part(table-column-authoring-0-div-1),
  &::part(table-column-authoring-1-div-1), 
  &::part(table-column-authoring-2-div-1),
  &::part(table-column-authoring-3-div-1),
  &::part(table-column-authoring-4-div-1),
  &::part(table-column-authoring-5-div-1) {
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
    flex-grow: 1;
    min-width: 0;
  }

  &::part(button-contained), &::part(button-contained-focused) {
    border: none;
    background-color: palette.clr(light, background, paper);
    padding: 0;
  } 

  &::part(table-cell-icon-button) {
    border: none;
    border-radius: 2px;
    padding: 0;
    display: inline-block;
  }

  &::part(table-cell-text-action) {
    border: none;
    border-radius: 2px;
    padding: 6px;
    cursor: pointer;
    max-width: 50px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    display: inline-block;
  }

  &::part(table-cell-subtitle) {
    @include typography.caption;
    margin: 0;
    color: palette.clr(light, text, secondary);
  }

  &::part(table-header-menu-item):focus {
    border: none;
    outline: 1px solid palette.clr(light, action, focus) !important;
    outline-offset: -1px;
    display: block;
  }

  @media (max-height: 600px) {
    max-height: calc(83vh - 150px);
  }
}
