export function textValue(formData: FormData, key: string) {
  const value = formData.get(key);
  return typeof value === "string" ? value.trim() : "";
}

export function optionalText(formData: FormData, key: string) {
  const value = textValue(formData, key);
  return value.length > 0 ? value : null;
}

export function numberValue(formData: FormData, key: string, fallback = 0) {
  const value = textValue(formData, key).replace(/,/g, "");
  if (!value) return fallback;
  const parsed = Number(value);
  return Number.isFinite(parsed) ? parsed : fallback;
}

export function intValue(formData: FormData, key: string, fallback = 0) {
  return Math.trunc(numberValue(formData, key, fallback));
}

export function dateValue(formData: FormData, key: string, fallback = new Date()) {
  const value = textValue(formData, key);
  if (!value) return fallback;
  const date = new Date(`${value}T00:00:00`);
  return Number.isNaN(date.getTime()) ? fallback : date;
}

export function monthValue(formData: FormData, key: string, fallback = new Date()) {
  const value = textValue(formData, key);
  if (!value) return new Date(fallback.getFullYear(), fallback.getMonth(), 1);
  const date = new Date(`${value}-01T00:00:00`);
  return Number.isNaN(date.getTime()) ? fallback : date;
}

export function arrayValues(formData: FormData, key: string) {
  return formData
    .getAll(key)
    .filter((value): value is string => typeof value === "string" && value.length > 0);
}
