import { createTheme, MantineColorsTuple } from '@mantine/core';

// Define color tuples using CSS variables
const primary: MantineColorsTuple = [
  'var(--color-primary-50)',
  'var(--color-primary-100)',
  'var(--color-primary-200)',
  'var(--color-primary-300)',
  'var(--color-primary-400)',
  'var(--color-primary-500)',
  'var(--color-primary-600)',
  'var(--color-primary-700)',
  'var(--color-primary-800)',
  'var(--color-primary-900)',
];

const green: MantineColorsTuple = [
  'var(--color-green-50)',
  'var(--color-green-100)',
  'var(--color-green-200)',
  'var(--color-green-300)',
  'var(--color-green-400)',
  'var(--color-green-500)',
  'var(--color-green-600)',
  'var(--color-green-700)',
  'var(--color-green-800)',
  'var(--color-green-900)',
];

const yellow: MantineColorsTuple = [
  'var(--color-yellow-50)',
  'var(--color-yellow-100)',
  'var(--color-yellow-200)',
  'var(--color-yellow-300)',
  'var(--color-yellow-400)',
  'var(--color-yellow-500)',
  'var(--color-yellow-600)',
  'var(--color-yellow-700)',
  'var(--color-yellow-800)',
  'var(--color-yellow-900)',
];

const gray: MantineColorsTuple = [
  'var(--color-gray-50)',
  'var(--color-gray-100)',
  'var(--color-gray-200)',
  'var(--color-gray-300)',
  'var(--color-gray-400)',
  'var(--color-gray-500)',
  'var(--color-gray-600)',
  'var(--color-gray-700)',
  'var(--color-gray-800)',
  'var(--color-gray-900)',
];

export const mantineTheme = createTheme({
  // Primary color
  primaryColor: 'primary',

  // Color palette
  colors: {
    primary,
    green,
    yellow,
    gray,
  },

  // Spacing system - uses CSS variables
  spacing: {
    xs: 'var(--space-xs)',
    sm: 'var(--space-sm)',
    md: 'var(--space-md)',
    lg: 'var(--space-lg)',
    xl: 'var(--space-xl)',
  },

  // Border radius system
  radius: {
    xs: 'var(--radius-xs)',
    sm: 'var(--radius-sm)',
    md: 'var(--radius-md)',
    lg: 'var(--radius-lg)',
    xl: 'var(--radius-xl)',
  },

  // Shadow system
  shadows: {
    xs: 'var(--shadow-xs)',
    sm: 'var(--shadow-sm)',
    md: 'var(--shadow-md)',
    lg: 'var(--shadow-lg)',
    xl: 'var(--shadow-xl)',
  },

  // Custom variables for specific components
  other: {
    crop: {
      overlayBorder: 'var(--color-primary-500)',
      overlayBackground: 'rgba(59, 130, 246, 0.1)', // Blue with 10% opacity
      handleColor: 'var(--color-primary-500)',
      handleBorder: 'var(--bg-surface)',
    },
  },

  // Component customizations
  components: {
    Button: {
      styles: {
        root: {
          fontWeight: 'var(--font-weight-medium)',
          transition: 'all 0.2s ease',
        },
      },
      variants: {
        // Custom button variant for PDF tools
        pdfTool: (_theme: any) => ({
          root: {
            backgroundColor: 'var(--bg-surface)',
            border: '1px solid var(--border-default)',
            color: 'var(--text-primary)',
            '&:hover': {
              backgroundColor: 'var(--hover-bg)',
              borderColor: 'var(--color-primary-500)',
            },
          },
        }),
      },
    } as any,

    Paper: {
      styles: {
        root: {
          backgroundColor: 'var(--bg-surface)',
          border: '1px solid var(--border-subtle)',
        },
      },
    },

    Card: {
      styles: {
        root: {
          backgroundColor: 'var(--bg-surface)',
          border: '1px solid var(--border-subtle)',
          boxShadow: 'var(--shadow-sm)',
        },
      },
    },
    Textarea: {
      styles: (_theme: any) => ({
        input: {
          backgroundColor: 'var(--bg-surface)',
          borderColor: 'var(--border-default)',
          color: 'var(--text-primary)',
          '&:focus': {
            borderColor: 'var(--color-primary-500)',
            boxShadow: '0 0 0 1px var(--color-primary-500)',
          },
        },
        label: {
          color: 'var(--text-secondary)',
          fontWeight: 'var(--font-weight-medium)',
        },
      }),
    },

    TextInput: {
      styles: (_theme: any) => ({
        input: {
          backgroundColor: 'var(--bg-surface)',
          borderColor: 'var(--border-default)',
          color: 'var(--text-primary)',
          '&:focus': {
            borderColor: 'var(--color-primary-500)',
            boxShadow: '0 0 0 1px var(--color-primary-500)',
          },
        },
        label: {
          color: 'var(--text-secondary)',
          fontWeight: 'var(--font-weight-medium)',
        },
      }),
    },

     PasswordInput: {
      styles: (_theme: any) => ({
        input: {
          backgroundColor: 'var(--bg-surface)',
          borderColor: 'var(--border-default)',
          color: 'var(--text-primary)',
          '&:focus': {
            borderColor: 'var(--color-primary-500)',
            boxShadow: '0 0 0 1px var(--color-primary-500)',
          },
        },
        label: {
          color: 'var(--text-secondary)',
          fontWeight: 'var(--font-weight-medium)',
        },
      }),
    },

    Select: {
      styles: {
        input: {
          backgroundColor: 'var(--bg-surface)',
          borderColor: 'var(--border-default)',
          color: 'var(--text-primary)',
          '&:focus': {
            borderColor: 'var(--color-primary-500)',
            boxShadow: '0 0 0 1px var(--color-primary-500)',
          },
        },
        label: {
          color: 'var(--text-secondary)',
          fontWeight: 'var(--font-weight-medium)',
        },
        dropdown: {
          backgroundColor: 'var(--bg-surface)',
          borderColor: 'var(--border-subtle)',
          boxShadow: 'var(--shadow-lg)',
        },
        option: {
          color: 'var(--text-primary)',
          '&[dataHovered]': {
            backgroundColor: 'var(--hover-bg)',
          },
          '&[dataSelected]': {
            backgroundColor: 'var(--color-primary-100)',
            color: 'var(--color-primary-900)',
          },
        },
      },
    },

    MultiSelect: {
      styles: {
        input: {
          backgroundColor: 'var(--bg-surface)',
          borderColor: 'var(--border-default)',
          color: 'var(--text-primary)',
          '&:focus': {
            borderColor: 'var(--color-primary-500)',
            boxShadow: '0 0 0 1px var(--color-primary-500)',
          },
        },
        label: {
          color: 'var(--text-secondary)',
          fontWeight: 'var(--font-weight-medium)',
        },
        dropdown: {
          backgroundColor: 'var(--bg-surface)',
          borderColor: 'var(--border-subtle)',
          boxShadow: 'var(--shadow-lg)',
        },
        option: {
          color: 'var(--text-primary)',
          '&[data-hovered]': {
            backgroundColor: 'var(--hover-bg)',
          },
          '&[data-selected]': {
            backgroundColor: 'var(--color-primary-100)',
            color: 'var(--color-primary-900)',
          },
        },
      },
    },
    Tooltip: {
      styles: {
        tooltip: {
          backgroundColor: 'var( --tooltip-title-bg)',
          color: 'var( --tooltip-title-color)',
          border: '1px solid var(--tooltip-borderp)',
          fontSize: '0.75rem',
          fontWeight: '500',
          boxShadow: 'var(--shadow-md)',
          borderRadius: 'var(--radius-sm)',
        },
      },
    },

    Checkbox: {
      styles: {
        input: {
          borderColor: 'var(--border-default)',
          '&:checked': {
            backgroundColor: 'var(--color-primary-500)',
            borderColor: 'var(--color-primary-500)',
          },
        },
        label: {
          color: 'var(--text-primary)',
        },
      },
    },

    Slider: {
      styles: {
        track: {
          backgroundColor: 'var(--bg-muted)',
        },
        bar: {
          backgroundColor: 'var(--color-primary-500)',
        },
        thumb: {
          backgroundColor: 'var(--color-primary-500)',
          borderColor: 'var(--color-primary-500)',
        },
        mark: {
          borderColor: 'var(--border-default)',
        },
        markLabel: {
          color: 'var(--text-muted)',
        },
      },
    },

    Modal: {
      styles: {
        content: {
          backgroundColor: 'var(--bg-surface)',
          border: '1px solid var(--border-subtle)',
          boxShadow: 'var(--shadow-xl)',
        },
        header: {
          backgroundColor: 'var(--bg-surface)',
          borderBottom: '1px solid var(--border-subtle)',
        },
        title: {
          color: 'var(--text-primary)',
          fontWeight: 'var(--font-weight-semibold)',
        },
      },
    },

    Notification: {
      styles: {
        root: {
          backgroundColor: 'var(--bg-surface)',
          border: '1px solid var(--border-subtle)',
          boxShadow: 'var(--shadow-lg)',
        },
        title: {
          color: 'var(--text-primary)',
        },
        description: {
          color: 'var(--text-secondary)',
        },
      },
    },

    SegmentedControl: {
      styles: {
        root: {
          backgroundColor: 'var(--bg-muted)',
          border: '1px solid var(--border-subtle)',
        },
        control: {
          color: 'var(--text-secondary)',
          '[dataActive]': {
            backgroundColor: 'var(--bg-surface)',
            color: 'var(--text-primary)',
            boxShadow: 'var(--shadow-sm)',
          },
        },
      },
    },
  },
});
