import { unsafeCSSVarV2 } from '@blocksuite/affine-shared/theme';
import { baseTheme } from '@toeverything/theme';
import { css, unsafeCSS } from 'lit';

import {
  DEFAULT_ADD_BUTTON_WIDTH,
  DEFAULT_COLUMN_TITLE_HEIGHT,
} from '../../consts.js';

export const styles = css`
    affine-database-column-header {
        display: block;
        background-color: var(--affine-background-primary-color);
        position: relative;
        z-index: 2;
    }

    .affine-database-column-header {
        position: relative;
        display: flex;
        flex-direction: row;
        border-bottom: 1px solid var(--affine-border-color);
        border-top: 1px solid var(--affine-border-color);
        box-sizing: border-box;
        user-select: none;
        background-color: var(--affine-background-primary-color);
    }

    .affine-database-column {
        cursor: pointer;
    }

    .database-cell {
        user-select: none;
    }

    .database-cell.add-column-button {
        flex: 1;
        min-width: ${DEFAULT_ADD_BUTTON_WIDTH}px;
        min-height: 100%;
        display: flex;
        align-items: center;
    }

    .affine-database-column-content {
        display: flex;
        align-items: center;
        gap: 6px;
        width: 100%;
        height: 100%;
        padding: 6px;
        box-sizing: border-box;
        position: relative;
    }

    .affine-database-column-content:hover,
    .affine-database-column-content.edit {
        background: var(--affine-hover-color);
    }

    .affine-database-column-content.edit .affine-database-column-text-icon {
        opacity: 1;
    }

    .affine-database-column-text {
        flex: 1;
        display: flex;
        align-items: center;
        gap: 6px;
        /* https://stackoverflow.com/a/36247448/15443637 */
        overflow: hidden;
        color: var(--affine-text-secondary-color);
        font-size: 14px;
        position: relative;
    }

    .affine-database-column-type-icon {
        display: flex;
        align-items: center;
        border-radius: 4px;
        padding: 2px;
        font-size: 18px;
        color: ${unsafeCSSVarV2('database/textSecondary')};
    }

    .affine-database-column-text-content {
        flex: 1;
        display: flex;
        align-items: center;
        overflow: hidden;
    }

    .affine-database-column-content:hover .affine-database-column-text-icon {
        opacity: 1;
    }

    .affine-database-column-text-input {
        flex: 1;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        font-weight: 500;
    }

    .affine-database-column-text-icon {
        display: flex;
        align-items: center;
        width: 16px;
        height: 16px;
        background: var(--affine-white);
        border: 1px solid var(--affine-border-color);
        border-radius: 4px;
        opacity: 0;
    }

    .affine-database-column-text-save-icon {
        display: flex;
        align-items: center;
        width: 16px;
        height: 16px;
        border: 1px solid transparent;
        border-radius: 4px;
        fill: var(--affine-icon-color);
    }

    .affine-database-column-text-save-icon:hover {
        background: var(--affine-white);
        border-color: var(--affine-border-color);
    }

    .affine-database-column-text-icon svg {
        fill: var(--affine-icon-color);
    }

    .affine-database-column-input {
        width: 100%;
        height: 24px;
        padding: 0;
        border: none;
        color: inherit;
        font-weight: 600;
        font-size: 14px;
        font-family: ${unsafeCSS(baseTheme.fontSansFamily)};
        background: transparent;
    }

    .affine-database-column-input:focus {
        outline: none;
    }

    .affine-database-column-move {
        display: flex;
        align-items: center;
    }

    .affine-database-column-move svg {
        width: 10px;
        height: 14px;
        color: var(--affine-black-10);
        cursor: grab;
        opacity: 0;
    }

    .affine-database-column-content:hover svg {
        opacity: 1;
    }

    .affine-database-add-column-button {
        position: sticky;
        right: 0;
        display: flex;
        align-items: center;
        justify-content: center;
        width: 40px;
        height: 38px;
        cursor: pointer;
    }

    .header-add-column-button {
        height: ${DEFAULT_COLUMN_TITLE_HEIGHT}px;
        background-color: var(--affine-background-primary-color);
        display: flex;
        align-items: center;
        justify-content: center;
        width: 40px;
        cursor: pointer;
        font-size: 18px;
        color: ${unsafeCSSVarV2('icon/primary')};
    }

    @media print {
        .header-add-column-button {
            display: none;
        }
    }

    .affine-database-column-type-menu-icon {
        border: 1px solid var(--affine-border-color);
        border-radius: 4px;
        padding: 5px;
        background-color: var(--affine-background-secondary-color);
    }

    .affine-database-column-type-menu-icon svg {
        color: var(--affine-text-secondary-color);
        width: 20px;
        height: 20px;

    }

    .affine-database-column-move-preview {
        position: fixed;
        z-index: 100;
        width: 100px;
        height: 100px;
        background: var(--affine-text-emphasis-color);
    }

    .affine-database-column-move {
        --color: var(--affine-placeholder-color);
        --active: var(--affine-black-10);
        --bw: 1px;
        --bw2: -1px;
        cursor: grab;
        background: none;
        border: none;
        border-radius: 0;
        position: absolute;
        inset: 0;
    }

    .affine-database-column-move .control-l::before,
    .affine-database-column-move .control-h::before,
    .affine-database-column-move .control-l::after,
    .affine-database-column-move .control-h::after,
    .affine-database-column-move .control-r,
    .affine-database-column-move .hover-trigger {
        --delay: 0s;
        --delay-opacity: 0s;
        content: '';
        position: absolute;
        transition: all 0.2s ease var(--delay),
        opacity 0.2s ease var(--delay-opacity);
    }

    .affine-database-column-move .control-r {
        --delay: 0s;
        --delay-opacity: 0.6s;
        width: 4px;
        border-radius: 1px;
        height: 32%;
        background: var(--color);
        right: 6px;
        top: 50%;
        transform: translateY(-50%);
        opacity: 0;
        pointer-events: none;
    }

    .affine-database-column-move .hover-trigger {
        width: 12px;
        height: 80%;
        right: 3px;
        top: 10%;
        background: transparent
        z-index: 1;
        opacity: 1;
    }

    .affine-database-column-move:hover .control-r {
        opacity: 1;
    }

    .affine-database-column-move .control-h::before,
    .affine-database-column-move .control-h::after {
        --delay: 0.2s;
        width: calc(100% - var(--bw2) * 2);
        opacity: 0;
        height: var(--bw);
        right: var(--bw2);
        background: var(--active);
    }

    .affine-database-column-move .control-h::before {
        top: var(--bw2);
    }

    .affine-database-column-move .control-h::after {
        bottom: var(--bw2);
    }

    .affine-database-column-move .control-l::before {
        --delay: 0s;
        width: var(--bw);
        height: 100%;
        opacity: 0;
        background: var(--active);
        left: var(--bw2);
    }

    .affine-database-column-move .control-l::before {
        top: 0;
    }

    .affine-database-column-move .control-l::after {
        bottom: 0;
    }

    /* handle--active style */

    .affine-database-column-move:hover .control-r {
        --delay-opacity: 0s;
        opacity: 1;
    }

    .affine-database-column-move:active .control-r,
    .hover-trigger:hover ~ .control-r,
    .grabbing.affine-database-column-move .control-r {
        opacity: 1;
        --delay: 0s;
        --delay-opacity: 0s;
        right: var(--bw2);
        width: var(--bw);
        height: 100%;
        background: var(--active);
    }

    .affine-database-column-move:active .control-h::before,
    .affine-database-column-move:active .control-h::after,
    .hover-trigger:hover ~ .control-h::before,
    .hover-trigger:hover ~ .control-h::after,
    .grabbing.affine-database-column-move .control-h::before,
    .grabbing.affine-database-column-move .control-h::after {
        --delay: 0.2s;
        width: calc(100% - var(--bw2) * 2);
        opacity: 1;
    }

    .affine-database-column-move:active .control-l::before,
    .affine-database-column-move:active .control-l::after,
    .hover-trigger:hover ~ .control-l::before,
    .hover-trigger:hover ~ .control-l::after,
    .grabbing.affine-database-column-move .control-l::before,
    .grabbing.affine-database-column-move .control-l::after {
        --delay: 0.4s;
        opacity: 1;
    }
`;
