import * as React from "react";
import type { IconProps, IconMetadata, IconComponent } from "../../types";

interface GeminiProps extends IconProps {
  type?: "wordmark" | "icon";
}

export const Gemini: IconComponent<GeminiProps> = React.forwardRef<
  SVGSVGElement,
  GeminiProps
>(function Gemini(
  {
    color = "currentColor",
    fill,
    size = 24,
    strokeWidth,
    strokeLinecap,
    strokeLinejoin,
    strokeDasharray,
    opacity,
    className,
    type = "icon",
    ...props
  },
  forwardedRef,
) {
  if (type === "wordmark") {
    return (
      <svg
        width={size}
        height={size}
        viewBox="0 0 65 24"
        fill="none"
        xmlns="http://www.w3.org/2000/svg"
        className={className}
        strokeWidth={strokeWidth}
        strokeLinecap={strokeLinecap}
        strokeLinejoin={strokeLinejoin}
        strokeDasharray={strokeDasharray}
        opacity={opacity}
        {...props}
        ref={forwardedRef}
      >
        <g clipPath="url(#undefined-clip0_2011_435)">
          <mask
            id="undefined-mask0_2011_435"
            maskUnits="userSpaceOnUse"
            x="0"
            y="0"
            width={size}
            height={size}
          >
            <path
              d="M44.2383 7.7896C44.4964 8.37826 44.6255 9.00737 44.6255 9.67672C44.6255 9.00737 44.7504 8.37845 45.0004 7.7896C45.2583 7.20094 45.605 6.68901 46.0404 6.2536C46.4759 5.81801 46.9878 5.4754 47.5764 5.22538C48.165 4.96724 48.794 4.83836 49.4631 4.83836C48.794 4.83836 48.165 4.71326 47.5764 4.46324C46.9878 4.20529 46.4759 3.85852 46.0404 3.42312C45.605 2.98772 45.2583 2.47559 45.0004 1.88693C44.7504 1.29827 44.6255 0.669354 44.6255 0C44.6255 0.669354 44.4964 1.29827 44.2383 1.88693C43.9885 2.47559 43.6458 2.98772 43.2104 3.42312C42.7751 3.85852 42.263 4.20548 41.6744 4.46343C41.0858 4.71326 40.457 4.83836 39.7877 4.83836C40.457 4.83836 41.0858 4.96724 41.6744 5.22538C42.263 5.4754 42.7751 5.81801 43.2104 6.25341C43.6458 6.68901 43.9885 7.20075 44.2383 7.7896ZM4.9417 23.2705C5.9286 23.677 6.98088 23.8802 8.09835 23.8802C9.23037 23.8802 10.2607 23.6988 11.1896 23.3359C12.1185 22.9731 12.924 22.4578 13.6062 21.7901C14.2883 21.1224 14.8179 20.3314 15.1953 19.4169C15.5726 18.4879 15.7614 17.4718 15.7614 16.3687V16.347C15.7614 16.1439 15.7468 15.9551 15.7179 15.7808C15.7024 15.5987 15.6806 15.4172 15.6525 15.2366H8.142V17.0438H13.8021C13.7439 17.9146 13.5408 18.6693 13.1925 19.3081C12.8587 19.9323 12.4305 20.4474 11.908 20.8539C11.4001 21.2602 10.8123 21.565 10.1447 21.7684C9.4917 21.957 8.80957 22.0515 8.09835 22.0515C7.31458 22.0515 6.55271 21.9061 5.81258 21.6159C5.07622 21.3281 4.4032 20.8991 3.83141 20.3531C3.26549 19.8015 2.81559 19.141 2.48171 18.3719C2.14802 17.588 1.98099 16.7099 1.98099 15.7374C1.98099 14.7649 2.14065 13.8939 2.45998 13.1246C2.79387 12.3409 3.24376 11.6804 3.80968 11.1434C4.37113 10.5948 5.03761 10.1653 5.76913 9.88063C6.5119 9.59257 7.30169 9.44494 8.09835 9.44522C8.69356 9.44522 9.25947 9.52497 9.79648 9.68466C10.3335 9.82979 10.8268 10.0403 11.2767 10.316C11.7412 10.5919 12.1403 10.9257 12.4741 11.3176L13.8238 9.92409C13.1708 9.18387 12.3362 8.61052 11.3202 8.20403C10.3187 7.79773 9.24492 7.59458 8.09835 7.59458C6.99543 7.59458 5.95033 7.79773 4.96362 8.20403C3.99787 8.60607 3.1184 9.19002 2.37307 9.92409C1.63275 10.6643 1.05228 11.5279 0.631293 12.515C0.210494 13.502 0 14.5761 0 15.7376C0 16.899 0.210494 17.9728 0.631293 18.9598C1.05228 19.9468 1.63275 20.8104 2.37288 21.5509C3.10772 22.2875 3.98066 22.8718 4.9417 23.2705ZM19.6621 23.1182C20.5037 23.6262 21.4617 23.8802 22.5357 23.8802C23.7547 23.8802 24.7778 23.6045 25.6053 23.0528C26.4325 22.5014 27.0638 21.8047 27.4991 20.9628L25.8447 20.1789C25.5399 20.7305 25.1189 21.195 24.5821 21.5724C24.0594 21.9498 23.4064 22.1384 22.6226 22.1384C22.0131 22.1384 21.4254 21.9861 20.8593 21.6813C20.2934 21.3764 19.829 20.9191 19.4662 20.3097C19.1527 19.7828 18.9745 19.1369 18.932 18.3719H27.6734C27.6879 18.2993 27.6951 18.2048 27.6951 18.0888C27.7096 17.9726 27.7168 17.8639 27.7168 17.7623C27.7168 16.659 27.4991 15.6794 27.0638 14.8229C26.6428 13.9665 26.0332 13.2988 25.2351 12.8198C24.4368 12.3264 23.4863 12.0796 22.3832 12.0796C21.2947 12.0796 20.3442 12.3555 19.5314 12.9069C18.7187 13.444 18.0874 14.1625 17.6375 15.0624C17.2019 15.9623 16.9843 16.9421 16.9843 18.0017C16.9843 19.1339 17.2167 20.1426 17.6809 21.0282C18.1599 21.9135 18.8203 22.6103 19.6621 23.1182ZM19.0429 16.7824C19.1113 16.4593 19.209 16.1545 19.3354 15.868C19.6113 15.2438 20.0104 14.7504 20.5328 14.3875C21.0698 14.0101 21.6939 13.8213 22.405 13.8213C23 13.8213 23.5007 13.923 23.9071 14.1262C24.3136 14.315 24.6473 14.5616 24.9086 14.8664C25.1697 15.1712 25.3585 15.4979 25.4745 15.8462C25.5907 16.1802 25.6559 16.4922 25.6705 16.7824H19.0429ZM29.3817 12.428V23.5319H31.3409V17.3486C31.3409 16.739 31.4643 16.1656 31.7111 15.6285C31.9579 15.0915 32.2989 14.6632 32.7343 14.3439C33.1696 14.0101 33.6632 13.8431 34.2145 13.8431C34.9838 13.8431 35.5788 14.0682 35.9998 14.5181C36.4351 14.9535 36.6528 15.7011 36.6528 16.7607V23.5319H38.5903V17.3051C38.5903 16.6953 38.7137 16.1293 38.9605 15.6068C39.2071 15.0697 39.5481 14.6415 39.9837 14.3221C40.419 14.0028 40.9124 13.8431 41.4639 13.8431C42.2477 13.8431 42.8499 14.061 43.2709 14.4964C43.7062 14.9318 43.9239 15.6794 43.9239 16.739V23.5319H45.8614V16.4124C45.8614 15.1206 45.5421 14.0753 44.9036 13.2771C44.2795 12.4789 43.2998 12.0796 41.9647 12.0796C41.0794 12.0796 40.3174 12.2827 39.6789 12.6892C39.0402 13.0955 38.5323 13.6108 38.155 14.235C37.8937 13.5963 37.4655 13.0811 36.8705 12.6892C36.29 12.2829 35.5862 12.0796 34.7589 12.0796C34.2945 12.0796 33.83 12.174 33.3656 12.3626C32.9157 12.5369 32.5166 12.7763 32.1682 13.0811C31.8199 13.3714 31.5443 13.6979 31.3409 14.061H31.2538V12.428H29.3817ZM47.6248 12.428V23.5319H49.5623V12.428H47.6248ZM47.603 10.0766C47.8787 10.3378 48.2054 10.4683 48.5828 10.4683C48.9745 10.4683 49.3012 10.3379 49.5623 10.0766C49.8236 9.80069 49.9542 9.47414 49.9542 9.09675C49.9542 8.70482 49.8236 8.37826 49.5623 8.1171C49.3012 7.84119 48.9745 7.70324 48.5828 7.70324C48.2054 7.70324 47.8787 7.84119 47.603 8.1171C47.3417 8.37826 47.2111 8.70482 47.2111 9.09675C47.2111 9.47414 47.3417 9.80069 47.603 10.0766ZM51.3819 12.428V23.5319H53.3412V17.3486C53.3412 16.7533 53.4646 16.1945 53.7113 15.672C53.9726 15.1349 54.3281 14.6995 54.778 14.3658C55.2279 14.0173 55.7577 13.8431 56.3673 13.8431C57.1799 13.8431 57.8332 14.0682 58.3265 14.5181C58.8199 14.9535 59.0666 15.7011 59.0666 16.7607V23.5319H61.0259V16.4124C61.0259 15.106 60.6777 14.061 59.981 13.2771C59.2843 12.4789 58.2611 12.0796 56.9114 12.0796C56.1133 12.0796 55.3875 12.2755 54.7345 12.6675C54.0815 13.0594 53.6097 13.5239 53.3194 14.061H53.2323V12.428H51.3819ZM62.6706 12.428V23.5319H64.6081V12.428H62.6706ZM62.6488 10.0766C62.9245 10.3378 63.2512 10.4683 63.6285 10.4683C64.0202 10.4683 64.3469 10.3379 64.6081 10.0766C64.8694 9.80069 65 9.47414 65 9.09675C65 8.70482 64.8694 8.37826 64.6081 8.1171C64.3469 7.84119 64.0202 7.70324 63.6285 7.70324C63.2512 7.70324 62.9245 7.84119 62.6488 8.1171C62.3877 8.37826 62.2569 8.70482 62.2569 9.09675C62.2569 9.47414 62.3877 9.80069 62.6488 10.0766Z"
              fill="#fff"
              fillRule="evenodd"
              clipRule="evenodd"
            />
          </mask>
          <g mask="url(#undefined-mask0_2011_435)">
            <path
              d="M-29.9019 -86.0678H127.324V43.4421H-29.9019V-86.0678Z"
              fill="url(#undefined-paint0_linear_2011_435)"
            />
          </g>
        </g>
        <defs>
          <linearGradient
            id="undefined-paint0_linear_2011_435"
            x1="-10.847"
            y1="24.65"
            x2="67.074"
            y2="5.743"
            gradientUnits="userSpaceOnUse"
          >
            <stop stopColor="#439ddf" />
            <stop offset=".524" stopColor="#4f87ed" />
            <stop offset=".781" stopColor="#9476c5" />
            <stop offset=".888" stopColor="#bc688e" />
            <stop offset="1" stopColor="#d6645d" />
          </linearGradient>
          <clipPath id="undefined-clip0_2011_435">
            <path fill="#fff" d="M0 0H65V24H0z" />
          </clipPath>
        </defs>
      </svg>
    );
  }

  if (type === "icon") {
    return (
      <svg
        width={size}
        height={size}
        viewBox="0 0 24 24"
        fill="none"
        xmlns="http://www.w3.org/2000/svg"
        className={className}
        strokeWidth={strokeWidth}
        strokeLinecap={strokeLinecap}
        strokeLinejoin={strokeLinejoin}
        strokeDasharray={strokeDasharray}
        opacity={opacity}
        {...props}
        ref={forwardedRef}
      >
        <mask
          id="undefined-mask0_2011_419"
          maskUnits="userSpaceOnUse"
          x="0"
          y="0"
          width={size}
          height={size}
        >
          <path
            d="M11.3567 0.39351C11.5405 -0.103402 12.246 -0.0954292 12.4185 0.40543L12.9005 1.80436C13.6205 3.89411 14.7989 5.79634 16.3493 7.37171C17.8997 8.94707 19.7828 10.1557 21.8608 10.909L23.4155 11.4725C23.9103 11.6518 23.9113 12.3511 23.4171 12.532L21.8587 13.1023C19.8372 13.8421 18.0011 15.0134 16.4782 16.5348C14.9553 18.0562 13.7822 19.8911 13.0403 21.9118L12.4304 23.5732C12.25 24.0649 11.5551 24.0662 11.3727 23.5753L10.7359 21.8601C9.99099 19.854 8.82048 18.0331 7.30481 16.5224C5.78915 15.0118 3.96429 13.8474 1.95573 13.1092L0.369313 12.5262C-0.122123 12.3455 -0.123412 11.651 0.3673 11.4685L1.98472 10.8672C3.9849 10.1235 5.80088 8.95667 7.30845 7.44638C8.81603 5.9361 9.97963 4.11803 10.7197 2.11652L11.3567 0.39351Z"
            fill="#3186ff"
          />
        </mask>
        <g mask="url(#undefined-mask0_2011_419)">
          <g filter="url(#undefined-filter0_f_2011_419)">
            <path
              d="M13.1124 24.8053C21.8303 24.8053 28.8976 19.0722 28.8976 11.9999C28.8976 4.92774 21.8303 -0.80542 13.1124 -0.80542C4.39441 -0.80542 -2.67288 4.92774 -2.67288 11.9999C-2.67288 19.0722 4.39441 24.8053 13.1124 24.8053Z"
              fill="#3689ff"
            />
          </g>
          <g filter="url(#undefined-filter1_f_2011_419)">
            <path
              d="M2.68283 17.3154C5.72966 17.3154 8.1996 14.7013 8.1996 11.4765C8.1996 8.25175 5.72966 5.63757 2.68283 5.63757C-0.364008 5.63757 -2.83395 8.25175 -2.83395 11.4765C-2.83395 14.7013 -0.364008 17.3154 2.68283 17.3154Z"
              fill="#f6c013"
            />
          </g>
          <g filter="url(#undefined-filter2_f_2011_419)">
            <path
              d="M1.55531 17.7986C4.60214 17.7986 7.07209 15.1844 7.07209 11.9597C7.07209 8.7349 4.60214 6.12073 1.55531 6.12073C-1.49153 6.12073 -3.96147 8.7349 -3.96147 11.9597C-3.96147 15.1844 -1.49153 17.7986 1.55531 17.7986Z"
              fill="#f6c013"
            />
          </g>
          <g filter="url(#undefined-filter3_f_2011_419)">
            <path
              d="M15.609 0.845644C13.8372 6.6443 5.26001 10.8188 1.79692 10.8725L11.5822 -5.31543L15.609 0.845644Z"
              fill="#fa4340"
            />
          </g>
          <g filter="url(#undefined-filter4_f_2011_419)">
            <path
              d="M15.3271 -1.00677C13.5553 4.79189 4.97812 8.96636 1.51504 9.02007L11.3003 -7.16785L15.3271 -1.00677Z"
              fill="#fa4340"
            />
          </g>
          <g filter="url(#undefined-filter5_f_2011_419)">
            <path
              d="M15.6493 22.51C13.8775 16.7113 5.30028 12.5369 1.83719 12.4832L11.6224 28.6711L15.6493 22.51Z"
              fill="#14bb69"
            />
          </g>
          <g filter="url(#undefined-filter6_f_2011_419)">
            <path
              d="M15.8103 25.812C14.0385 20.0133 5.46135 15.8389 1.99826 15.7852L11.7835 31.9731L15.8103 25.812Z"
              fill="#14bb69"
            />
          </g>
        </g>
        <defs>
          <filter
            id="undefined-filter0_f_2011_419"
            x="-5.572"
            y="-3.705"
            width={size}
            height={size}
            filterUnits="userSpaceOnUse"
            colorInterpolationFilters="sRGB"
          >
            <feFlood result="BackgroundImageFix" floodOpacity="0" />
            <feBlend
              in="SourceGraphic"
              in2="BackgroundImageFix"
              result="shape"
            />
            <feGaussianBlur
              stdDeviation="1.45"
              result="effect1_foregroundBlur_2011_419"
            />
          </filter>
          <filter
            id="undefined-filter1_f_2011_419"
            x="-7.988"
            y=".483"
            width={size}
            height={size}
            filterUnits="userSpaceOnUse"
            colorInterpolationFilters="sRGB"
          >
            <feFlood result="BackgroundImageFix" floodOpacity="0" />
            <feBlend
              in="SourceGraphic"
              in2="BackgroundImageFix"
              result="shape"
            />
            <feGaussianBlur
              stdDeviation="2.577"
              result="effect1_foregroundBlur_2011_419"
            />
          </filter>
          <filter
            id="undefined-filter2_f_2011_419"
            x="-9.116"
            y=".966"
            width={size}
            height={size}
            filterUnits="userSpaceOnUse"
            colorInterpolationFilters="sRGB"
          >
            <feFlood result="BackgroundImageFix" floodOpacity="0" />
            <feBlend
              in="SourceGraphic"
              in2="BackgroundImageFix"
              result="shape"
            />
            <feGaussianBlur
              stdDeviation="2.577"
              result="effect1_foregroundBlur_2011_419"
            />
          </filter>
          <filter
            id="undefined-filter3_f_2011_419"
            x="-3.357"
            y="-10.47"
            width={size}
            height={size}
            filterUnits="userSpaceOnUse"
            colorInterpolationFilters="sRGB"
          >
            <feFlood result="BackgroundImageFix" floodOpacity="0" />
            <feBlend
              in="SourceGraphic"
              in2="BackgroundImageFix"
              result="shape"
            />
            <feGaussianBlur
              stdDeviation="2.577"
              result="effect1_foregroundBlur_2011_419"
            />
          </filter>
          <filter
            id="undefined-filter4_f_2011_419"
            x="-3.639"
            y="-12.322"
            width={size}
            height={size}
            filterUnits="userSpaceOnUse"
            colorInterpolationFilters="sRGB"
          >
            <feFlood result="BackgroundImageFix" floodOpacity="0" />
            <feBlend
              in="SourceGraphic"
              in2="BackgroundImageFix"
              result="shape"
            />
            <feGaussianBlur
              stdDeviation="2.577"
              result="effect1_foregroundBlur_2011_419"
            />
          </filter>
          <filter
            id="undefined-filter5_f_2011_419"
            x="-3.317"
            y="7.329"
            width={size}
            height={size}
            filterUnits="userSpaceOnUse"
            colorInterpolationFilters="sRGB"
          >
            <feFlood result="BackgroundImageFix" floodOpacity="0" />
            <feBlend
              in="SourceGraphic"
              in2="BackgroundImageFix"
              result="shape"
            />
            <feGaussianBlur
              stdDeviation="2.577"
              result="effect1_foregroundBlur_2011_419"
            />
          </filter>
          <filter
            id="undefined-filter6_f_2011_419"
            x="-3.156"
            y="10.631"
            width={size}
            height={size}
            filterUnits="userSpaceOnUse"
            colorInterpolationFilters="sRGB"
          >
            <feFlood result="BackgroundImageFix" floodOpacity="0" />
            <feBlend
              in="SourceGraphic"
              in2="BackgroundImageFix"
              result="shape"
            />
            <feGaussianBlur
              stdDeviation="2.577"
              result="effect1_foregroundBlur_2011_419"
            />
          </filter>
        </defs>
      </svg>
    );
  }

  console.error(`Gemini doesn't support ${type}`);
  return null;
});

Gemini.displayName = "Gemini";

Gemini.metadata = {
  name: "Gemini",
  category: "wordmark/ai",
  tags: ["gemini", "icon"],
  description: "Gemini icon from wordmark/ai category",
  type: ["stroke", "icon"],
} as IconMetadata;

export default Gemini;
