import Icons from "@/components/ui/icons";
import Modal from "@/components/ui/modal";
import { useZForm } from "@/hooks/useZForm";
import { createDisclosure } from "@/lib/utils";
import React from "react";
import { ScrollView, XStack } from "tamagui";
import FormField from "@/components/ui/form";
import { ErrorAlert } from "@/components/ui/alert";
import Button from "@/components/ui/button";
import {
  SetRoleSchema,
  setRoleSchema,
  teamMemberRoles,
} from "../schema/team-form";
import { SelectField } from "@/components/ui/select";
import { useSetRoleMutation } from "../hooks/query";

export const changeRoleModal = createDisclosure<SetRoleSchema>();

const ChangeRoleForm = () => {
  const { data } = changeRoleModal.use();
  const form = useZForm(setRoleSchema, data);
  const setRole = useSetRoleMutation(data?.teamId || "");

  const onSubmit = form.handleSubmit((values) => {
    setRole.mutate(values, {
      onSuccess: () => {
        changeRoleModal.onClose();
        form.reset();
      },
    });
  });

  return (
    <Modal
      disclosure={changeRoleModal}
      title="Change Role"
      description="Change team member role."
      maxHeight={280}
    >
      <ScrollView contentContainerStyle={{ padding: "$4", pt: 0, gap: "$4" }}>
        <ErrorAlert error={setRole.error} />

        <FormField label="Role">
          <SelectField
            items={teamMemberRoles}
            form={form}
            name="role"
            placeholder="Select Role..."
          />
        </FormField>
      </ScrollView>

      <XStack p="$4" gap="$4">
        <Button
          flex={1}
          onPress={changeRoleModal.onClose}
          bg="$colorTransparent"
        >
          Cancel
        </Button>
        <Button
          flex={1}
          icon={<Icons name="account-plus" size={18} />}
          onPress={onSubmit}
          isLoading={setRole.isPending}
        >
          Update Role
        </Button>
      </XStack>
    </Modal>
  );
};

export default ChangeRoleForm;