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

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

export const Replicate: IconComponent<ReplicateProps> = React.forwardRef<
  SVGSVGElement,
  ReplicateProps
>(function Replicate(
  {
    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 105 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 fill="currentColor" clipPath="url(#undefined-clip0_2011_438)">
          <path d="M24.93 8.025C27.861 8.025 30.325 9.95 30.325 13.525 30.325 13.762 30.325 13.962 30.3 14.325H21.493C21.607 16.137 23.085 17.337 24.942 17.337 26.509 17.337 27.558 16.625 28.139 15.65L30.022 16.975C29.011 18.55 27.267 19.55 24.917 19.55 21.518 19.55 19.067 17.162 19.067 13.787 19.079 10.525 21.531 8.025 24.93 8.025ZM21.619 12.537H27.848C27.583 10.937 26.282 10.075 24.841 10.075 23.401 10.075 21.948 10.9 21.619 12.537ZM32.827 8.237H35.291V9.725C35.922 8.837 37.287 8.025 38.892 8.025 41.962 8.025 44.287 10.612 44.287 13.787 44.287 16.95 41.962 19.55 38.892 19.55 37.274 19.55 35.91 18.725 35.291 17.837V23.95H32.827V8.237ZM38.45 10.237C36.453 10.237 35.089 11.787 35.089 13.787 35.089 15.787 36.453 17.337 38.45 17.337 40.421 17.337 41.785 15.787 41.785 13.787 41.785 11.787 40.421 10.237 38.45 10.237ZM49.265 2.7H46.802V19.313H49.265V2.7ZM53.814 5.825C52.917 5.825 52.159 5.1 52.159 4.187 52.159 3.3 52.917 2.575 53.814 2.575 54.737 2.575 55.444 3.312 55.444 4.187 55.444 5.1 54.737 5.825 53.814 5.825ZM52.589 8.237H55.052V19.313H52.589V8.237ZM63.468 19.538C60.107 19.538 57.554 17.05 57.554 13.775 57.554 10.5 60.107 8.012 63.468 8.012 65.78 8.012 67.726 9.237 68.686 11.075L66.538 12.225C65.995 11.1 64.908 10.275 63.468 10.275 61.471 10.275 60.069 11.8 60.069 13.775 60.069 15.75 61.484 17.275 63.468 17.275 64.895 17.275 65.995 16.45 66.538 15.325L68.686 16.475C67.726 18.325 65.767 19.538 63.468 19.538ZM75.534 8.025C77.152 8.025 78.491 8.85 79.123 9.725V8.237H81.587V19.312H79.123V17.825C78.491 18.712 77.152 19.537 75.534 19.537 72.464 19.537 70.139 16.95 70.139 13.775 70.139 10.612 72.464 8.025 75.534 8.025ZM75.989 10.237C73.993 10.237 72.653 11.787 72.653 13.787 72.653 15.787 73.993 17.337 75.989 17.337 77.986 17.337 79.325 15.787 79.325 13.787 79.325 11.787 77.973 10.237 75.989 10.237ZM85.807 19.325V10.413H83.469V8.238H85.807V5.163H88.271V8.238H92.516V10.413H88.271V17.138H92.516V19.325H85.807ZM17.917 8.238V10.425H11.877V19.325H9.413V8.238H17.917Z" />
          <path d="M17.917 4.125V6.3H7.22745V19.325H4.76355V4.125H17.917Z" />
          <path d="M17.917 0V2.175H2.578V19.325H.114V0H17.917ZM99.542 8.025C102.473 8.025 104.937 9.95 104.937 13.525 104.937 13.762 104.937 13.962 104.912 14.325H96.105C96.218 16.137 97.697 17.337 99.554 17.337 101.121 17.337 102.17 16.625 102.751 15.65L104.634 16.975C103.623 18.55 101.879 19.55 99.529 19.55 96.13 19.55 93.679 17.162 93.679 13.787 93.704 10.525 96.143 8.025 99.542 8.025ZM96.231 12.537H102.46C102.195 10.937 100.894 10.075 99.453 10.075 98.025 10.075 96.572 10.9 96.231 12.537Z" />
        </g>
        <defs>
          <clipPath id="undefined-clip0_2011_438">
            <path fill="#fff" d="M0 0H105V24H0z" />
          </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}
      >
        <g fill="currentColor" clipPath="url(#undefined-clip0_2011_424)">
          <path d="M24 10.2625V12.9745H14.4816V24H11.448V10.2625H24Z" />
          <path d="M24 5.13123V7.84802H8.75521V24H5.72159V5.13123H24Z" />
          <path d="M24 0V2.7168H3.0336V24H0V0H24Z" />
        </g>
        <defs>
          <clipPath id="undefined-clip0_2011_424">
            <path fill="#fff" d="M0 0H24V24H0z" />
          </clipPath>
        </defs>
      </svg>
    );
  }

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

Replicate.displayName = "Replicate";

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

export default Replicate;
