import { getAdminSessionFromRequest } from "../../../../../auth";
import { fail, ok } from "../../../_lib";
import { getDefaultParticipantTableColumns, getParticipantTableColumns, saveParticipantTableColumns } from "../_columns";

function parseColumns(value: unknown) {
  if (Array.isArray(value)) return value.map((column) => String(column));
  return [];
}

export async function GET(request: Request) {
  try {
    if (!await getAdminSessionFromRequest(request)) return fail(request, "UNAUTHORIZED", "Admin login is required.", 401);
    return ok(request, {
      availableColumns: getDefaultParticipantTableColumns(),
      selectedColumns: await getParticipantTableColumns()
    });
  } catch (error) {
    return fail(request, "COLUMN_SETTINGS_UNAVAILABLE", "Participant table columns could not be loaded.", 500, error instanceof Error ? error.message : error);
  }
}

export async function PATCH(request: Request) {
  try {
    if (!await getAdminSessionFromRequest(request)) return fail(request, "UNAUTHORIZED", "Admin login is required.", 401);
    const payload = await request.json() as { columns?: unknown };
    return ok(request, {
      availableColumns: getDefaultParticipantTableColumns(),
      selectedColumns: await saveParticipantTableColumns(parseColumns(payload.columns))
    });
  } catch (error) {
    return fail(request, "COLUMN_SETTINGS_UPDATE_FAILED", "Participant table columns could not be saved.", 500, error instanceof Error ? error.message : error);
  }
}
