/* @flow */
/** @jsx node */

import {
  node,
  type ElementNode,
  type ComponentNode,
} from "@krakenjs/jsx-pragmatic/src";

import {
  getLogoCDNUrl,
  getLogoColors,
  SVGLogo,
  type SVGLogoProps,
} from "../../lib";
import { LOGO_COLOR, BADGE } from "../../constants";
import type { LogoColors, LogoColorMap } from "../../types";

// Credit Rebrand Badge (text only)

export const CREDIT_REBRAND_BADGE_COLORS: LogoColorMap = {
  [LOGO_COLOR.DEFAULT]: {
    background: "#60CDFF",
    foreground: "#000000",
  },
  [LOGO_COLOR.BLACK]: {
    background: "#000000",
    foreground: "#FFFFFF",
  },
  [LOGO_COLOR.BLUE]: {
    background: "#60CDFF",
    foreground: "#000000",
  },
  [LOGO_COLOR.WHITE]: {
    background: "#FFFFFF",
    foreground: "#000000",
  },
};

export const getCreditRebrandBadgeSVG = ({
  background,
  foreground,
}: LogoColors): ElementNode => {
  return (
    <svg
      width="315"
      height="70"
      viewBox="0 0 315 70"
      fill="none"
      xmlns="http://www.w3.org/2000/svg"
    >
      <rect width="315" height="70" rx="16.47" fill={background} />
      <path
        d="M29.1252 51.5V18.9753H40.5563C48.2345 18.9753 51.858 24.5398 51.858 29.7162C51.858 34.8925 48.2345 40.4571 40.5563 40.4571H36.674V51.5H29.1252ZM104.053 51.5V18.9753H115.484C123.162 18.9753 126.786 24.5398 126.786 29.7162C126.786 34.8925 123.162 40.4571 115.484 40.4571H111.602V51.5H104.053ZM152.322 51.5V18.9753H159.569V51.5H152.322ZM36.674 33.771H39.4347C42.4111 33.771 44.0934 32.1318 44.0934 29.7162C44.0934 27.3006 42.4111 25.6614 39.4347 25.6614H36.674V33.771ZM111.602 33.771H114.362C117.339 33.771 119.021 32.1318 119.021 29.7162C119.021 27.3006 117.339 25.6614 114.362 25.6614H111.602V33.771ZM61.6499 52.1902C55.4814 52.1902 50.7364 47.1432 50.7364 40.7159C50.7364 34.2886 55.4814 29.2417 61.6499 29.2417C64.1087 29.2417 66.3086 30.1907 67.9478 31.7867V29.9319H74.5476V51.5H67.9478V49.6451C66.3086 51.2412 64.1087 52.1902 61.6499 52.1902ZM136.578 52.1902C130.409 52.1902 125.664 47.1432 125.664 40.7159C125.664 34.2886 130.409 29.2417 136.578 29.2417C139.036 29.2417 141.236 30.1907 142.875 31.7867V29.9319H149.475V51.5H142.875V49.6451C141.236 51.2412 139.036 52.1902 136.578 52.1902ZM78.5593 62.4566L86.065 47.5315L76.1005 29.9319H84.2964L89.861 40.1983H89.9041L94.8217 29.9319H102.5L86.2376 62.4566H78.5593ZM62.8577 45.6335C65.5322 45.6335 67.5164 43.5629 67.5164 40.7159C67.5164 37.8689 65.5322 35.7984 62.8577 35.7984C60.1833 35.7984 58.199 37.8689 58.199 40.7159C58.199 43.5629 60.1833 45.6335 62.8577 45.6335ZM137.785 45.6335C140.46 45.6335 142.444 43.5629 142.444 40.7159C142.444 37.8689 140.46 35.7984 137.785 35.7984C135.111 35.7984 133.127 37.8689 133.127 40.7159C133.127 43.5629 135.111 45.6335 137.785 45.6335ZM190.011 52.0176C180.478 52.0176 173.274 44.5551 173.274 35.2376C173.274 25.9202 180.478 18.4576 190.011 18.4576C193.29 18.4576 196.309 19.3635 198.811 20.9595V25.9633C196.525 24.0222 193.592 22.8575 190.27 22.8575C183.325 22.8575 178.063 28.2064 178.063 35.2376C178.063 42.2688 183.325 47.6177 190.27 47.6177C193.592 47.6177 196.525 46.4531 198.811 44.5119V49.5157C196.309 51.1118 193.29 52.0176 190.011 52.0176ZM203.626 51.5V30.7946H207.81V33.4259C207.983 33.1671 208.198 32.9514 208.414 32.7357C209.751 31.3985 211.649 30.5789 213.806 30.5789C214.28 30.5789 214.712 30.6221 215.186 30.6652V34.8494C214.712 34.8063 214.28 34.7631 213.763 34.7631C212.037 34.7631 210.614 35.367 209.622 36.4023C208.63 37.3944 208.026 38.7317 208.026 41.1473V51.5H203.626ZM227.163 52.0176C221.124 52.0176 216.552 47.2295 216.552 41.1904C216.552 34.9788 220.865 30.277 226.646 30.277C232.426 30.277 236.696 34.9788 236.696 41.1473C236.696 41.6649 236.653 42.2257 236.61 42.7433H221.038C221.469 45.7197 224.014 47.8766 227.206 47.8766C229.622 47.8766 231.65 46.6256 232.685 44.7276L236.308 46.8413C234.453 49.9902 231.132 52.0176 227.163 52.0176ZM221.038 39.163H232.167C231.908 36.316 229.708 34.2455 226.689 34.2455C223.626 34.2455 221.34 36.316 221.038 39.163ZM250.065 52.0176C244.156 52.0176 239.626 47.1864 239.626 41.1473C239.626 35.1082 244.156 30.277 250.065 30.277C252.567 30.277 254.767 31.1828 256.449 32.7357V17.94H260.849V51.5H256.665V49.4295C254.94 51.0686 252.654 52.0176 250.065 52.0176ZM250.54 47.7903C254.163 47.7903 256.924 44.9433 256.924 41.1473C256.924 37.3513 254.163 34.5043 250.54 34.5043C246.96 34.5043 244.199 37.3513 244.199 41.1473C244.199 44.9433 246.96 47.7903 250.54 47.7903ZM269.32 27.6457C267.681 27.6457 266.301 26.2222 266.301 24.6261C266.301 22.9869 267.681 21.6497 269.32 21.6497C270.959 21.6497 272.297 22.9869 272.297 24.6261C272.297 26.2222 270.959 27.6457 269.32 27.6457ZM267.12 51.5V30.7946H271.52V51.5H267.12ZM279.28 51.5V34.72H275.484V30.7946H279.28V22.9007H283.68V30.7946H288.123V34.72H283.68V51.5H279.28Z"
        fill={foreground}
      />
    </svg>
  );
};

export function CreditRebrandBadgeExternalImage({
  logoColor = LOGO_COLOR.DEFAULT,
  ...props
}: {
  logoColor?: $Values<typeof LOGO_COLOR>,
}): ComponentNode<SVGLogoProps> {
  const cdnUrl = getLogoCDNUrl(
    BADGE.CREDIT_REBRAND,
    CREDIT_REBRAND_BADGE_COLORS,
    logoColor
  );

  return (
    <SVGLogo
      {...props}
      name={BADGE.CREDIT_REBRAND}
      alt="PayPal Credit"
      role="presentation"
      logoColor={logoColor}
      cdnUrl={cdnUrl}
    />
  );
}

export function CreditRebrandBadgeInlineSVG({
  logoColor = LOGO_COLOR.DEFAULT,
  ...props
}: {
  logoColor?: $Values<typeof LOGO_COLOR>,
}): ComponentNode<SVGLogoProps> {
  const svg = getCreditRebrandBadgeSVG(
    getLogoColors(BADGE.CREDIT_REBRAND, CREDIT_REBRAND_BADGE_COLORS, logoColor)
  );

  return (
    <SVGLogo
      {...props}
      name={BADGE.CREDIT_REBRAND}
      alt="PayPal Credit"
      role="presentation"
      logoColor={logoColor}
      render={() => {
        return svg;
      }}
    />
  );
}

export const CreditRebrandBadge = CreditRebrandBadgeInlineSVG;

// Credit Rebrand PP Badge (with PP monogram)

export const CREDIT_REBRAND_PP_BADGE_COLORS: LogoColorMap = {
  [LOGO_COLOR.DEFAULT]: {
    background: "#60CDFF",
    foreground: "#000000",
    primary: "#050A0E",
    secondary: "#31677F",
    tertiary: "#1E3E4C",
  },
  [LOGO_COLOR.BLACK]: {
    background: "#000000",
    foreground: "#FFFFFF",
    primary: "#F3F3F3",
    secondary: "#898989",
    tertiary: "#B8B8B8",
  },
  [LOGO_COLOR.BLUE]: {
    background: "#60CDFF",
    foreground: "#000000",
    primary: "#050A0E",
    secondary: "#31677F",
    tertiary: "#1E3E4C",
  },
  [LOGO_COLOR.WHITE]: {
    background: "#FFFFFF",
    foreground: "#000000",
    primary: "#002991",
    secondary: "#60CDFF",
    tertiary: "#008CFF",
  },
};

export const getCreditRebrandPPBadgeSVG = ({
  background,
  foreground,
  primary,
  secondary,
  tertiary,
}: LogoColors): ElementNode => {
  return (
    <svg
      width="169"
      height="71"
      viewBox="0 0 169 71"
      fill="none"
      xmlns="http://www.w3.org/2000/svg"
    >
      <rect width="169" height="70.285" rx="16.47" fill={background} />
      <g clip-path="url(#credit-rebrand-pp-badge-clip)">
        <path
          d="M45.0801 27.6059C45.0801 31.8766 41.1385 36.9152 35.1753 36.9152H29.4314L29.1493 38.694L27.8093 47.2588H20.6707L24.9648 19.6758H36.5309C40.4255 19.6758 43.4894 21.8464 44.6178 24.8633C44.939 25.7174 45.0958 26.6421 45.0801 27.6059Z"
          fill={primary}
        />
        <path
          d="M49.194 35.5356C48.4026 40.3156 44.2886 43.8105 39.4224 43.8105H35.4339L33.7726 54.1542H26.6731L27.8093 47.2584L29.1493 38.6935L29.4314 36.9148H35.1753C41.1307 36.9148 45.0801 31.8761 45.0801 27.6055C48.0108 29.1178 49.7191 32.1739 49.194 35.5356Z"
          fill={secondary}
        />
        <path
          d="M45.0801 27.6066C43.8498 26.9641 42.361 26.5723 40.7389 26.5723H31.0535L29.4314 36.9159H35.1753C41.1307 36.9159 45.0801 31.8773 45.0801 27.6066Z"
          fill={tertiary}
        />
      </g>
      <path
        d="M74.5076 49.1806C66.8579 49.1806 61.1039 43.1924 61.137 35.7158C61.1701 28.2393 66.9771 22.2511 74.6269 22.2511C77.2575 22.2511 79.6773 22.978 81.6792 24.2587L81.6614 28.2739C79.8338 26.7163 77.4842 25.7817 74.8189 25.7817C69.246 25.7817 65.0041 30.0738 64.9791 35.7158C64.9542 41.3579 69.1581 45.65 74.7309 45.65C77.3962 45.65 79.7541 44.7154 81.5955 43.1578L81.5778 47.173C79.5645 48.4537 77.1383 49.1806 74.5076 49.1806ZM85.0881 48.7652L85.1617 32.1506H88.5192L88.5099 34.2621C88.6493 34.0544 88.8231 33.8813 88.9969 33.7083C90.0747 32.6352 91.6006 31.9776 93.3313 31.9776C93.7121 31.9776 94.0581 32.0122 94.4387 32.0468L94.4238 35.4043C94.0432 35.3697 93.6972 35.3351 93.2819 35.3351C91.8973 35.3351 90.7529 35.8197 89.9531 36.6504C89.1534 37.4465 88.6641 38.5196 88.6555 40.4579L88.6187 48.7652H85.0881ZM103.627 49.1806C98.7815 49.1806 95.1294 45.3385 95.1509 40.4925C95.173 35.5082 98.6511 31.7353 103.289 31.7353C107.928 31.7353 111.338 35.5082 111.316 40.4579C111.314 40.8733 111.277 41.3233 111.241 41.7386H98.7452C99.0808 44.127 101.115 45.8577 103.677 45.8577C105.615 45.8577 107.247 44.8539 108.084 43.3309L110.984 45.0269C109.484 47.5537 106.812 49.1806 103.627 49.1806ZM98.758 38.8657H107.688C107.491 36.5812 105.733 34.9197 103.31 34.9197C100.852 34.9197 99.0104 36.5812 98.758 38.8657ZM121.659 49.1806C116.917 49.1806 113.299 45.3038 113.321 40.4579C113.342 35.612 116.994 31.7353 121.736 31.7353C123.744 31.7353 125.506 32.4622 126.85 33.7083L126.903 21.8358H130.433L130.314 48.7652H126.956L126.964 47.1038C125.573 48.4191 123.736 49.1806 121.659 49.1806ZM122.054 45.7884C124.962 45.7884 127.187 43.5039 127.201 40.4579C127.214 37.4119 125.009 35.1274 122.102 35.1274C119.229 35.1274 117.003 37.4119 116.99 40.4579C116.976 43.5039 119.182 45.7884 122.054 45.7884ZM136.85 29.6238C135.535 29.6238 134.432 28.4816 134.438 27.2009C134.444 25.8856 135.556 24.8125 136.871 24.8125C138.187 24.8125 139.255 25.8856 139.249 27.2009C139.243 28.4816 138.165 29.6238 136.85 29.6238ZM135 48.7652L135.073 32.1506H138.604L138.531 48.7652H135ZM144.411 48.7652L144.471 35.3005H141.424L141.438 32.1506H144.484L144.512 25.8163H148.043L148.015 32.1506H151.58L151.566 35.3005H148.001L147.942 48.7652H144.411Z"
        fill={foreground}
      />
      <defs>
        <clipPath id="credit-rebrand-pp-badge-clip">
          <rect
            width="28.6174"
            height="34.4788"
            fill="white"
            transform="translate(20.6707 19.6758)"
          />
        </clipPath>
      </defs>
    </svg>
  );
};

export function CreditRebrandPPBadgeExternalImage({
  logoColor = LOGO_COLOR.DEFAULT,
  ...props
}: {
  logoColor?: $Values<typeof LOGO_COLOR>,
}): ComponentNode<SVGLogoProps> {
  const cdnUrl = getLogoCDNUrl(
    BADGE.CREDIT_REBRAND_PP,
    CREDIT_REBRAND_PP_BADGE_COLORS,
    logoColor
  );

  return (
    <SVGLogo
      {...props}
      name={BADGE.CREDIT_REBRAND_PP}
      alt="PayPal Credit"
      role="presentation"
      logoColor={logoColor}
      cdnUrl={cdnUrl}
    />
  );
}

export function CreditRebrandPPBadgeInlineSVG({
  logoColor = LOGO_COLOR.DEFAULT,
  ...props
}: {
  logoColor?: $Values<typeof LOGO_COLOR>,
}): ComponentNode<SVGLogoProps> {
  const svg = getCreditRebrandPPBadgeSVG(
    getLogoColors(
      BADGE.CREDIT_REBRAND_PP,
      CREDIT_REBRAND_PP_BADGE_COLORS,
      logoColor
    )
  );

  return (
    <SVGLogo
      {...props}
      name={BADGE.CREDIT_REBRAND_PP}
      alt="PayPal Credit"
      role="presentation"
      logoColor={logoColor}
      render={() => {
        return svg;
      }}
    />
  );
}

export const CreditRebrandPPBadge = CreditRebrandPPBadgeInlineSVG;
