import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types";
import { z } from "zod";
import { verbrauchsausweisWohnenPDFValidator } from "./validators/verbrauchsausweis-wohnen-pdf-validator";

export function convertAusweisData(
	inputs: Partial<VerbrauchsausweisWohnenClient>
): Record<string, string> {
	// Wir wollen alle Werte zu einem Flachen Objekt umwandeln, sodass wir dass später benutzen können.
	// Dazu kommen noch einige wichtige Eigenschaften die man im PDF brauchen könnte.
	let pdfInputs: z.infer<typeof verbrauchsausweisWohnenPDFValidator> = {
		...inputs,
		pdf: {
			"brennstoff": [inputs.aufnahme?.brennstoff_1, inputs.aufnahme?.brennstoff_2].filter(x => x).join(", ")
		}
	}
	let result = recursiveFlatten(inputs, "");
	// Außerdem müssen wir alle Werte zu strings umwandeln.
	for (const key in result) {
		result[key] = String(result[key]);
	}

	return result;
}


function recursiveFlatten(obj: any, parentKey = ""): Record<string, string> {
	const result: Record<string, string> = {};

	for (const key in obj) {
		const value = obj[key];

		const newKey = parentKey ? `${parentKey}.${key}` : key;

		if (typeof value === "object") {
			Object.assign(result, recursiveFlatten(value, newKey));
		} else {
			result[newKey] = value;
		}
	}

	return result;
}