"use server";

import { revalidatePath } from "next/cache";
import { initDb } from "@/lib/db";
import { requireSuperAdmin } from "@/lib/auth/require-super-admin";
import { applyPlanToWorkspace } from "@/lib/queries/billing-queries";
import { savePlatformSettings } from "@/lib/queries/system-settings-queries";
import type { ActionResult } from "@/lib/actions/auth";
import type { PlanTier } from "@/types";
import type { PlatformSettings } from "@/lib/queries/system-settings-queries";

/** Suspend or unsuspend a client workspace. */
export async function toggleWorkspaceSuspension(
  workspaceId: string
): Promise<ActionResult<{ isSuspended: boolean }>> {
  const { userId } = await requireSuperAdmin();
  const { Workspace, AuditLog } = initDb();

  const workspace = await Workspace.findByPk(workspaceId);
  if (!workspace) return { success: false, error: "Workspace not found" };

  const isSuspended = !workspace.isSuspended;
  await workspace.update({ isSuspended });

  await AuditLog.create({
    actorUserId: userId,
    workspaceId,
    action: isSuspended ? "admin.workspace_suspended" : "admin.workspace_unsuspended",
    metadata: { workspaceName: workspace.name },
  });

  revalidatePath("/admin");
  revalidatePath("/admin/clients");
  revalidatePath("/admin/overview");

  return { success: true, data: { isSuspended } };
}

/** Manually set a workspace plan (enterprise / overrides). */
export async function adminSetWorkspacePlan(input: {
  workspaceId: string;
  planTier: PlanTier;
}): Promise<ActionResult> {
  const { userId } = await requireSuperAdmin();
  const { Workspace, AuditLog } = initDb();

  const workspace = await Workspace.findByPk(input.workspaceId);
  if (!workspace) return { success: false, error: "Workspace not found" };

  await applyPlanToWorkspace(input.workspaceId, input.planTier);

  await AuditLog.create({
    actorUserId: userId,
    workspaceId: input.workspaceId,
    action: "admin.plan_changed",
    metadata: {
      message: `Client "${workspace.name}" set to ${input.planTier}`,
      planTier: input.planTier,
    },
  });

  revalidatePath("/admin");
  revalidatePath("/admin/clients");
  revalidatePath("/admin/overview");

  return { success: true };
}

/** Save platform system settings. */
export async function updatePlatformSettings(
  input: PlatformSettings
): Promise<ActionResult> {
  const { userId } = await requireSuperAdmin();

  await savePlatformSettings(input);

  const { AuditLog } = initDb();
  await AuditLog.create({
    actorUserId: userId,
    workspaceId: null,
    action: "admin.settings_updated",
    metadata: { message: "System settings updated" },
  });

  revalidatePath("/admin/settings");

  return { success: true };
}
