import type { Redis } from 'ioredis';
import { z } from 'zod';

const FUN_CONFIG_PREFIX = 'fun:config:';

export const FunConfigSchema = z.object({
  enabled: z.boolean().default(true),
  mediaEnabled: z.boolean().default(true)
});

export type FunConfig = z.infer<typeof FunConfigSchema>;

const DEFAULT_FUN_CONFIG: FunConfig = { enabled: true, mediaEnabled: true };

export async function getFunConfig(redis: Redis, guildId: string): Promise<FunConfig> {
  const raw = await redis.get(`${FUN_CONFIG_PREFIX}${guildId}`);
  if (!raw) {
    return { ...DEFAULT_FUN_CONFIG };
  }
  const parsed = FunConfigSchema.safeParse(JSON.parse(raw));
  return parsed.success ? parsed.data : { ...DEFAULT_FUN_CONFIG };
}

export async function setFunConfig(redis: Redis, guildId: string, config: FunConfig): Promise<void> {
  await redis.set(`${FUN_CONFIG_PREFIX}${guildId}`, JSON.stringify(config));
}
