"use client";

import { toast } from "sonner";

import type { RbacModule } from "@/app/dashboard/admins/access/app-modules/_lib/app-modules-server-api";
import { createRole } from "@/components/admins/rbac/api/roles-api";
import { RoleForm } from "@/components/admins/rbac/role-form";
import type { RoleFormValues } from "@/components/admins/rbac/schemas/rbac.schema";

type CreateRolePageClientProps = {
  availableModules: RbacModule[];
  modulesErrorMessage: string | null;
};

export function CreateRolePageClient({
  availableModules,
  modulesErrorMessage,
}: CreateRolePageClientProps) {
  const onSubmit = async (values: RoleFormValues) => {
    try {
      const data = await createRole(values);
      toast.success(data.message ?? `Role "${values.name}" created.`);
    } catch (error) {
      const message = error instanceof Error ? error.message : "Could not create role.";

      if (message.toLowerCase().includes("already exists")) {
        toast.error(`Role "${values.name}" already exists. Choose a different role name.`);
        return;
      }

      toast.error(message);
    }
  };

  return (
    <RoleForm
      mode="create"
      onSubmit={onSubmit}
      availableModules={availableModules}
      modulesErrorMessage={modulesErrorMessage}
    />
  );
}
