import React from "react";
// next
import type { NextPage } from "next";
import { useRouter } from "next/router";
// react hook form
import { useForm } from "react-hook-form";
// services
import workspaceService from "lib/services/workspace.service";
// hooks
import useUser from "lib/hooks/useUser";
// hoc
import withAuth from "lib/hoc/withAuthWrapper";
// layouts
import DefaultLayout from "layouts/DefaultLayout";
// ui
import { Input, Button, Select } from "ui";
// types
import type { IWorkspace } from "types";

const CreateWorkspace: NextPage = () => {
  const {
    register,
    handleSubmit,
    setError,
    formState: { errors, isSubmitting },
  } = useForm<IWorkspace>({
    defaultValues: {
      name: "",
    },
  });

  const router = useRouter();

  const { mutateWorkspaces, user } = useUser();

  const onSubmit = async (formData: IWorkspace) => {
    await workspaceService
      .createWorkspace(formData)
      .then((res) => {
        console.log(res);
        mutateWorkspaces((prevData) => [...(prevData ?? []), res], false);
        router.push("/");
      })
      .catch((err) => {
        Object.keys(err).map((key) => {
          const errorMessage = err[key];
          setError(key as keyof IWorkspace, {
            message: Array.isArray(errorMessage) ? errorMessage.join(", ") : errorMessage,
          });
        });
      });
  };

  // const workspaceName = watch("name") ?? "";

  // useEffect(() => {
  //   workspaceName && workspaceName !== ""
  //     ? setValue(
  //         "url",
  //         `${window.location.origin}/${workspaceName
  //           .toLowerCase()
  //           .replace(/ /g, "")}`
  //       )
  //     : setValue("url", workspaceName);
  // }, [workspaceName, setValue]);

  return (
    <DefaultLayout>
      <div className="flex flex-col items-center justify-center w-full h-full px-4">
        {user && (
          <div className="w-96 p-2 rounded-lg bg-indigo-100 text-theme mb-10 lg:mb-20">
            <p className="text-sm text-center">logged in as {user.email}</p>
          </div>
        )}
        <div className="rounded border p-4 px-6 w-full md:w-2/3 lg:w-1/3 space-y-4 flex flex-col justify-between bg-white">
          <h2 className="text-2xl text-center font-medium mb-4">Create a new workspace</h2>
          <form onSubmit={handleSubmit(onSubmit)}>
            <div className="space-y-4">
              <div>
                <Input
                  id="name"
                  label="Workspace Name"
                  name="name"
                  autoComplete="off"
                  register={register}
                  validations={{
                    required: "Name is required",
                  }}
                  error={errors.name}
                  placeholder="Enter workspace name"
                />
              </div>
              <div>
                <Input
                  id="url"
                  label="Workspace URL"
                  name="url"
                  autoComplete="off"
                  validations={{
                    required: "URL is required",
                  }}
                  placeholder="Enter workspace URL"
                />
              </div>
              <div>
                <Select
                  id="size"
                  name="company_size"
                  label="How large is your company?"
                  register={register}
                  options={[
                    { value: 5, label: "5" },
                    { value: 10, label: "10" },
                    { value: 25, label: "25" },
                    { value: 50, label: "50" },
                  ]}
                />
              </div>
              <div>
                <Input
                  id="projects"
                  label="What is your role?"
                  name="projects"
                  autoComplete="off"
                  placeholder="Head of Engineering"
                />
              </div>
              {/* <div>
          <TextArea
            id="description"
            label="Description"
            name="description"
            register={register}
            error={errors.description}
            placeholder="Enter workspace description"
          />
        </div> */}
              <Button type="submit" className="w-full" disabled={isSubmitting}>
                {isSubmitting ? "Creating Workspace..." : "Create Workspace"}
              </Button>
            </div>
          </form>
        </div>
      </div>
    </DefaultLayout>
  );
};

export default withAuth(CreateWorkspace);