// INVION Cosmic Design System — 우주 테마 정의
export const theme = {
  // 색상 팔레트 (Stellar White — 라이트 모드)
  colors: {
    // 주요 브랜드 색상: Cosmic Indigo-Violet
    primary: {
      50: "hsl(245 80% 98%)",
      100: "hsl(245 70% 95%)",
      200: "hsl(245 60% 90%)",
      300: "hsl(245 55% 82%)",
      400: "hsl(245 65% 70%)",
      500: "hsl(245 75% 57%)",
      600: "hsl(245 75% 50%)",
      700: "hsl(245 70% 42%)",
      800: "hsl(245 65% 33%)",
      900: "hsl(245 55% 22%)",
      DEFAULT: "hsl(245 75% 57%)",
      foreground: "hsl(0 0% 100%)",
    },

    // 보조 색상: Nebula Slate
    secondary: {
      DEFAULT: "hsl(240 10% 95%)",
      foreground: "hsl(240 20% 15%)",
    },

    // 액센트 색상: Stellar Surface
    accent: {
      DEFAULT: "hsl(240 10% 93%)",
      foreground: "hsl(240 20% 15%)",
    },

    // 파괴적 액션: Supernova Red
    destructive: {
      DEFAULT: "hsl(0 80% 60%)",
      foreground: "hsl(0 0% 100%)",
    },

    // 성공: Aurora Green
    success: {
      DEFAULT: "hsl(152 72% 38%)",
      foreground: "hsl(0 0% 100%)",
    },

    // 경고: Stellar Amber
    warning: {
      DEFAULT: "hsl(38 95% 50%)",
      foreground: "hsl(0 0% 100%)",
    },

    // 정보: Nebula Cyan
    info: {
      DEFAULT: "hsl(195 90% 45%)",
      foreground: "hsl(0 0% 100%)",
    },

    // 뮤트: Cosmic Dust
    muted: {
      DEFAULT: "hsl(240 10% 94%)",
      foreground: "hsl(240 5% 46%)",
    },

    // 배경: Stellar White
    background: "hsl(240 20% 99%)",
    foreground: "hsl(240 10% 5%)",

    // 카드: Pure White
    card: {
      DEFAULT: "hsl(0 0% 100%)",
      foreground: "hsl(240 10% 5%)",
    },

    // 팝오버
    popover: {
      DEFAULT: "hsl(0 0% 100%)",
      foreground: "hsl(240 10% 5%)",
    },

    // 테두리: Stardust
    border: "hsl(240 8% 88%)",
    input: "hsl(240 8% 88%)",
    ring: "hsl(245 75% 57%)",
  },

  // 타이포그래피
  typography: {
    fontFamily: {
      sans: ["Inter", "system-ui", "sans-serif"],
      mono: ["JetBrains Mono", "ui-monospace", "monospace"],
    },
    fontSize: {
      xs: ["0.75rem", { lineHeight: "1rem" }],
      sm: ["0.875rem", { lineHeight: "1.25rem" }],
      base: ["1rem", { lineHeight: "1.5rem" }],
      lg: ["1.125rem", { lineHeight: "1.75rem" }],
      xl: ["1.25rem", { lineHeight: "1.75rem" }],
      "2xl": ["1.5rem", { lineHeight: "2rem" }],
      "3xl": ["1.875rem", { lineHeight: "2.25rem" }],
      "4xl": ["2.25rem", { lineHeight: "2.5rem" }],
    },
    fontWeight: {
      normal: "400",
      medium: "500",
      semibold: "600",
      bold: "700",
    },
  },

  // 간격
  spacing: {
    px: "1px",
    0: "0",
    0.5: "0.125rem",
    1: "0.25rem",
    1.5: "0.375rem",
    2: "0.5rem",
    2.5: "0.625rem",
    3: "0.75rem",
    3.5: "0.875rem",
    4: "1rem",
    5: "1.25rem",
    6: "1.5rem",
    7: "1.75rem",
    8: "2rem",
    9: "2.25rem",
    10: "2.5rem",
    11: "2.75rem",
    12: "3rem",
    14: "3.5rem",
    16: "4rem",
    20: "5rem",
    24: "6rem",
    28: "7rem",
    32: "8rem",
    36: "9rem",
    40: "10rem",
    44: "11rem",
    48: "12rem",
    52: "13rem",
    56: "14rem",
    60: "15rem",
    64: "16rem",
    72: "18rem",
    80: "20rem",
    96: "24rem",
  },

  // 둥근 모서리
  borderRadius: {
    none: "0",
    sm: "0.125rem",
    DEFAULT: "0.25rem",
    md: "0.375rem",
    lg: "0.5rem",
    xl: "0.75rem",
    "2xl": "1rem",
    "3xl": "1.5rem",
    full: "9999px",
  },

  // 그림자
  boxShadow: {
    sm: "0 1px 2px 0 rgb(0 0 0 / 0.05)",
    DEFAULT: "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",
    md: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",
    lg: "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",
    xl: "0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)",
    "2xl": "0 25px 50px -12px rgb(0 0 0 / 0.25)",
    inner: "inset 0 2px 4px 0 rgb(0 0 0 / 0.05)",
    none: "none",
  },

  // 애니메이션
  animation: {
    duration: {
      fast: "150ms",
      normal: "200ms",
      slow: "300ms",
    },
    timing: {
      easeInOut: "cubic-bezier(0.4, 0, 0.2, 1)",
      easeOut: "cubic-bezier(0, 0, 0.2, 1)",
      easeIn: "cubic-bezier(0.4, 0, 1, 1)",
    },
  },

  // 반응형 브레이크포인트
  breakpoints: {
    sm: "640px",
    md: "768px",
    lg: "1024px",
    xl: "1280px",
    "2xl": "1536px",
  },

  // z-index 레벨
  zIndex: {
    dropdown: 1000,
    sticky: 1020,
    fixed: 1030,
    modal: 1040,
    popover: 1050,
    tooltip: 1060,
    toast: 1070,
  },
};

// 다크 모드 테마 (추후 확장용)
export const darkTheme = {
  ...theme,
  colors: {
    ...theme.colors,
    background: "hsl(222.2 84% 4.9%)",
    foreground: "hsl(210 40% 98%)",
    card: {
      DEFAULT: "hsl(222.2 84% 4.9%)",
      foreground: "hsl(210 40% 98%)",
    },
    popover: {
      DEFAULT: "hsl(222.2 84% 4.9%)",
      foreground: "hsl(210 40% 98%)",
    },
    muted: {
      DEFAULT: "hsl(217.2 32.6% 17.5%)",
      foreground: "hsl(215 20.2% 65.1%)",
    },
    border: "hsl(217.2 32.6% 17.5%)",
    input: "hsl(217.2 32.6% 17.5%)",
  },
};

// 테마 유틸리티 함수
export const getThemeValue = (path: string, theme = theme) => {
  return path.split(".").reduce((obj, key) => obj?.[key], theme);
};

// CSS 변수 생성 함수
export const createCSSVariables = (theme: typeof theme) => {
  const variables: Record<string, string> = {};

  // 색상 변수 생성
  Object.entries(theme.colors).forEach(([key, value]) => {
    if (typeof value === "string") {
      variables[`--color-${key}`] = value;
    } else if (typeof value === "object") {
      Object.entries(value).forEach(([subKey, subValue]) => {
        variables[`--color-${key}-${subKey}`] = subValue as string;
      });
    }
  });

  return variables;
};

export type Theme = typeof theme;
