import { z } from "zod";

export const CreateDashboardSchema = z.object({
  name: z.string().trim().min(1, "Name is required").max(200, "Name is too long"),
  description: z.string().trim().max(2000).nullish(),
});

export const UpdateDashboardSchema = z
  .object({
    name: z.string().trim().min(1).max(200).optional(),
    description: z.string().trim().max(2000).nullish(),
    status: z.enum(["draft", "published"]).optional(),
    coverImagePath: z.string().trim().max(500).nullish(),
  })
  .refine((v) => Object.keys(v).length > 0, {
    message: "Nothing to update",
  });

export const PublishDashboardSchema = z.object({
  versionId: z.string().uuid("versionId must be a uuid"),
});

export const RollbackDashboardSchema = z.object({
  versionId: z.string().uuid("versionId must be a uuid"),
});

export const SetDashboardAccessSchema = z.object({
  userIds: z.array(z.string().uuid("userIds must be uuids")).max(1000),
});

export const ServeQuerySchema = z.object({
  v: z.string().uuid("v must be a version uuid").optional(),
});

export const CreatePublicLinkSchema = z.object({
  /** ISO 8601. Omitted/null = never expires. */
  expiresAt: z.string().datetime({ offset: true }).nullish(),
  /** Optional viewer password; stored as bcrypt, never in plaintext. */
  password: z.string().min(4, "Password must be at least 4 characters").max(200).nullish(),
});

export const UnlockPublicLinkSchema = z.object({
  password: z.string().min(1, "Password is required").max(200),
});

export const SetEntryPointSchema = z.object({
  entryPoint: z
    .string()
    .trim()
    .min(1, "entryPoint is required")
    .max(500)
    .refine((v) => v.toLowerCase().endsWith(".html"), {
      message: "entryPoint must be an .html file",
    }),
});
