import { styled } from "../stitches.config";

export const Input = styled("input", {
  // Reset
  appearance: "none",
  borderWidth: "0",
  boxSizing: "border-box",
  fontFamily: "inherit",
  outline: "none",
  width: "100%",
  flex: "1",
  backgroundColor: "$mauve4",
  display: "inline-flex",
  alignItems: "center",
  justifyContent: "center",
  borderRadius: "$sm",
  px: "$2",
  fontSize: "$md",
  lineHeight: 1,
  color: "$mauve12",
  boxShadow: `0 0 0 1px $colors$mauve8`,
  height: 35,
  WebkitTapHighlightColor: "rgba(0,0,0,0)",
  "&::before": {
    boxSizing: "border-box",
  },
  "&::after": {
    boxSizing: "border-box",
  },
  fontVariantNumeric: "tabular-nums",

  "&:-webkit-autofill": {
    boxShadow: "inset 0 0 0 1px $colors$blue6, inset 0 0 0 100px $colors$blue3",
  },

  "&:-webkit-autofill::first-line": {
    fontFamily: "$untitled",
    color: "$mauve12",
  },

  "&:focus": {
    boxShadow: `0 0 0 1px $colors$mauve10`,
    "&:-webkit-autofill": {
      boxShadow: `0 0 0 1px $colors$mauve10`,
    },
  },
  "&::placeholder": {
    color: "$mauve9",
  },
  "&:disabled": {
    pointerEvents: "none",
    backgroundColor: "$mauve2",
    color: "$mauve8",
    cursor: "not-allowed",
    "&::placeholder": {
      color: "$mauve7",
    },
  },
  "&:read-only": {
    backgroundColor: "$mauve2",
    "&:focus": {
      boxShadow: "inset 0px 0px 0px 1px $colors$mauve7",
    },
  },

  variants: {
    size: {
      sm: {
        height: "$5",
        fontSize: "$1",
        lineHeight: "$sizes$4",
        "&:-webkit-autofill::first-line": {
          fontSize: "$1",
        },
      },
      md: {
        height: "$8",
        fontSize: "$1",
        lineHeight: "$sizes$5",
        "&:-webkit-autofill::first-line": {
          fontSize: "$1",
        },
      },
      lg: {
        height: "$12",
        fontSize: "$2",
        lineHeight: "$sizes$6",
        "&:-webkit-autofill::first-line": {
          fontSize: "$3",
        },
      },
    },
    variant: {
      ghost: {
        boxShadow: "none",
        backgroundColor: "transparent",
        "@hover": {
          "&:hover": {
            boxShadow: "inset 0 0 0 1px $colors$mauve7",
          },
        },
        "&:focus": {
          backgroundColor: "$loContrast",
          boxShadow: `0 0 0 1px $colors$mauve10`,
        },
        "&:disabled": {
          backgroundColor: "transparent",
        },
        "&:read-only": {
          backgroundColor: "transparent",
        },
      },
      deep: {
        backgroundColor: "$deep",
        boxShadow: "none",
      },
    },
    state: {
      invalid: {
        boxShadow: "inset 0 0 0 1px $colors$crimson7",
        "&:focus": {
          boxShadow:
            "inset 0px 0px 0px 1px $colors$crimson8, 0px 0px 0px 1px $colors$crimson8",
        },
      },
      valid: {
        boxShadow: "inset 0 0 0 1px $colors$grass7",
        "&:focus": {
          boxShadow:
            "inset 0px 0px 0px 1px $colors$grass8, 0px 0px 0px 1px $colors$grass8",
        },
      },
    },
    cursor: {
      default: {
        cursor: "default",
        "&:focus": {
          cursor: "text",
        },
      },
      text: {
        cursor: "text",
      },
    },
  },
  defaultVariants: {
    size: "md",
  },
});

export default Input;
