import type { VariantProps } from "class-variance-authority"

import type { ButtonProps } from "@/components/TempDesignSystem/Button/button"
import type { CardProps } from "@/components/TempDesignSystem/Card/card"
import type { biroScriptVariants } from "@/components/TempDesignSystem/Text/BiroScript/variants"
import type { bodyVariants } from "@/components/TempDesignSystem/Text/Body/variants"
import type { headingVariants } from "@/components/TempDesignSystem/Text/Title/variants"

export function getTitleFontColor(
  theme: CardProps["theme"]
): VariantProps<typeof headingVariants>["color"] {
  switch (theme) {
    case "one":
      return "primaryLight"
    case "two":
      return "secondaryLight"
    case "three":
      return "tertiaryLight"
    case "primaryDark":
      return "primaryDark"
    case "primaryDim":
      return "primaryDim"
    case "primaryInverted":
      return "primaryLight"
    case "primaryStrong":
      return "primaryStrong"
    case "image":
      return "baseText"
  }
}

export function getScriptFontColor(
  theme: CardProps["theme"]
): VariantProps<typeof biroScriptVariants>["color"] {
  switch (theme) {
    case "one":
      return "primaryLightOnSurfaceAccent"
    case "two":
      return "secondaryLightAccent"
    case "three":
      return "tertiaryLightAccent"
    case "primaryDark":
      return "pink"
    case "primaryDim":
      return "primaryDimAccent"
    case "primaryInverted":
      return "primaryLightOnSurfaceAccent"
    case "primaryStrong":
      return "primaryStrongAccent"
    case "image":
      return "baseText"
  }
}

export function getBodyFontColor(
  theme: CardProps["theme"]
): VariantProps<typeof bodyVariants>["color"] {
  switch (theme) {
    case "one":
      return "primaryLight"
    case "two":
      return "secondaryLight"
    case "three":
      return "tertiaryLight"
    case "primaryDark":
      return "primaryDark"
    case "primaryDim":
      return "primaryDim"
    case "primaryInverted":
      return "primaryLight"
    case "primaryStrong":
      return "primaryStrong"
    case "image":
      return "baseText"
  }
}

export function getButtonTheme(
  theme: CardProps["theme"]
): ButtonProps["theme"] {
  switch (theme) {
    case "two":
      return "secondaryLight"
    case "three":
      return "tertiaryLight"
    case "primaryDark":
      return "primaryDark"
    case "primaryStrong":
    case "image":
      return "primaryStrong"
    case "one":
    case "primaryDim":
    case "primaryInverted":
    default:
      return "primaryLight"
  }
}
