export const parseLevelPayload = (payload: unknown) => {
  if (!payload) {
    return null;
  }
  if (typeof payload === "string") {
    try {
      return JSON.parse(payload);
    } catch {
      return null;
    }
  }
  return payload;
};

export const parseJsonArray = (value: unknown): string[] => {
  if (Array.isArray(value)) {
    return value.filter((item): item is string => typeof item === "string");
  }
  if (typeof value === "string" && value.length > 0) {
    try {
      const parsed = JSON.parse(value) as unknown;
      if (Array.isArray(parsed)) {
        return parsed.filter(
          (item): item is string => typeof item === "string",
        );
      }
    } catch {
      return [];
    }
  }
  return [];
};

/**
 * Parse un tableau JSON qui peut contenir des nombres.
 * Utilisé pour completed_days dans weekly_progress.
 */
export const parseJsonNumberArray = (value: unknown): number[] => {
  if (Array.isArray(value)) {
    return value.filter((item): item is number => typeof item === "number");
  }
  if (typeof value === "string" && value.length > 0) {
    try {
      const parsed = JSON.parse(value) as unknown;
      if (Array.isArray(parsed)) {
        return parsed
          .map((item) => (typeof item === "number" ? item : Number(item)))
          .filter((n) => !isNaN(n));
      }
    } catch {
      return [];
    }
  }
  return [];
};
