import { FC, useState } from "react";
// next imports
import Link from "next/link";
import Image from "next/image";
// icons
import GithubLogo from "public/logos/github-square.png";
import { CogIcon, CloudUploadIcon, UsersIcon, ImportLayersIcon, CheckIcon } from "components/icons";
import { ArrowLeftIcon } from "@heroicons/react/24/outline";
// components
import {
  GithubConfigure,
  GithubImportData,
  GithubIssuesSelect,
  GithubUsersSelect,
  GithubConfirm,
} from "components/integration";
// types
import { IAppIntegrations } from "types";

type Props = {
  workspaceSlug: string | undefined;
  provider: string | undefined;
  allIntegrations: IAppIntegrations[] | undefined;
  allIntegrationsError: Error | undefined;
  allWorkspaceIntegrations: any | undefined;
  allWorkspaceIntegrationsError: Error | undefined;
  allIntegrationImporters: any | undefined;
  allIntegrationImportersError: Error | undefined;
};

export interface IIntegrationData {
  state: string;
}

export const GithubIntegrationRoot: FC<Props> = ({
  workspaceSlug,
  provider,
  allIntegrations,
  allIntegrationsError,
  allWorkspaceIntegrations,
  allWorkspaceIntegrationsError,
  allIntegrationImporters,
  allIntegrationImportersError,
}) => {
  const integrationWorkflowData = [
    {
      title: "Configure",
      key: "import-configure",
      icon: CogIcon,
    },
    {
      title: "Import Data",
      key: "import-import-data",
      icon: CloudUploadIcon,
    },
    { title: "Issues", key: "migrate-issues", icon: UsersIcon },
    {
      title: "Users",
      key: "migrate-users",
      icon: ImportLayersIcon,
    },
    {
      title: "Confirm",
      key: "migrate-confirm",
      icon: CheckIcon,
    },
  ];
  const activeIntegrationState = () => {
    const currentElementIndex = integrationWorkflowData.findIndex(
      (_item) => _item?.key === integrationData?.state
    );

    return currentElementIndex;
  };

  const [integrationData, setIntegrationData] = useState<IIntegrationData>({
    state: "import-configure",
  });
  const handleIntegrationData = (key: string = "state", value: string) => {
    setIntegrationData((previousData) => ({ ...previousData, [key]: value }));
  };

  return (
    <div className="space-y-4">
      <Link href={`/${workspaceSlug}/settings/import-export`}>
        <div className="inline-flex cursor-pointer items-center gap-2 text-sm font-medium text-gray-600 hover:text-gray-900">
          <div>
            <ArrowLeftIcon className="h-3 w-3" />
          </div>
          <div>Back</div>
        </div>
      </Link>

      <div className="space-y-4 rounded border border-gray-200 bg-white p-4">
        <div className="flex items-center gap-2">
          <div className="h-10 w-10 flex-shrink-0">
            <Image src={GithubLogo} alt="GithubLogo" />
          </div>
          <div className="flex h-full w-full items-center justify-center">
            {integrationWorkflowData.map((_integration, _idx) => (
              <>
                <div
                  key={_integration?.key}
                  className={`flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-full border
              ${
                _idx <= activeIntegrationState()
                  ? `border-[#3F76FF] bg-[#3F76FF] text-white ${
                      _idx === activeIntegrationState()
                        ? `border-opacity-100 bg-opacity-100`
                        : `border-opacity-80 bg-opacity-80`
                    }`
                  : `border-gray-300`
              }
              `}
                >
                  <_integration.icon
                    width={`18px`}
                    height={`18px`}
                    color={_idx <= activeIntegrationState() ? "#ffffff" : "#d1d5db"}
                  />
                </div>
                {_idx < integrationWorkflowData.length - 1 && (
                  <div
                    key={_idx}
                    className={`border-b  px-7 ${
                      _idx <= activeIntegrationState() - 1 ? `border-[#3F76FF]` : `border-gray-300`
                    }`}
                  >
                    {" "}
                  </div>
                )}
              </>
            ))}
          </div>
        </div>

        <div className="relative w-full space-y-4 overflow-hidden">
          <div className="w-full">
            {integrationData?.state === "import-configure" && (
              <GithubConfigure
                state={integrationData}
                handleState={handleIntegrationData}
                workspaceSlug={workspaceSlug}
                provider={provider}
                allIntegrations={allIntegrations}
                allIntegrationsError={allIntegrationsError}
                allWorkspaceIntegrations={allWorkspaceIntegrations}
                allWorkspaceIntegrationsError={allWorkspaceIntegrationsError}
              />
            )}
            {integrationData?.state === "import-import-data" && (
              <GithubImportData state={integrationData} handleState={handleIntegrationData} />
            )}
            {integrationData?.state === "migrate-issues" && (
              <GithubIssuesSelect state={integrationData} handleState={handleIntegrationData} />
            )}
            {integrationData?.state === "migrate-users" && (
              <GithubUsersSelect state={integrationData} handleState={handleIntegrationData} />
            )}
            {integrationData?.state === "migrate-confirm" && (
              <GithubConfirm state={integrationData} handleState={handleIntegrationData} />
            )}
          </div>
        </div>
      </div>
    </div>
  );
};