import {
	AufnahmeClient,
	VerbrauchsausweisWohnenClient,
	ObjektClient,
} from "#components/Ausweis/types.js";
import { faker } from "@faker-js/faker";
import { Enums } from "#lib/client/prisma";

export function fakeObjekt(seed: number = 42): ObjektClient {
	faker.seed(seed);
	return {
		adresse: faker.location.streetAddress(),
		plz: faker.location.zipCode({ format: "#####" }),
		ort: faker.location.city(),
		uid: faker.string.uuid(),
		latitude: faker.location.latitude(),
		longitude: faker.location.longitude(),
	};
}

export function fakeAufnahme(seed: number = 42, uid_objekt: string = faker.string.uuid()): AufnahmeClient {
	faker.seed(seed);
	const tuerenDicht = faker.datatype.boolean();

	return {
		baujahr_gebaeude: [faker.number.int({ min: 1960, max: 2014 })],
		baujahr_heizung: [faker.number.int({ min: 1960, max: 2014 })],
		baujahr_klima: [faker.number.int({ min: 1985, max: 2014 })],
		nutzflaeche: faker.number.int({ min: 50, max: 300 }),
		einheiten: faker.number.int({ min: 1, max: 3 }),
		saniert: faker.datatype.boolean(),
		keller: faker.helpers.enumValue(Enums.Heizungsstatus),
		dachgeschoss: faker.helpers.enumValue(Enums.Heizungsstatus),
		flaeche: faker.number.int({ min: 50, max: 300 }),
		gebaeudetyp: "Einfamilienhaus",
		gebaeudeteil: "Gesamtgebäude",
		lueftung: "Fensterlueftung",
		kuehlung: "Vorhanden",
		brennstoff_1: "Erdgas H",
		alternative_heizung: faker.datatype.boolean(),
		alternative_kuehlung: faker.datatype.boolean(),
		alternative_lueftung: faker.datatype.boolean(),
		alternative_warmwasser: faker.datatype.boolean(),
		aussenwand_gedaemmt: faker.datatype.boolean(),
		aussenwand_min_12cm_gedaemmt: faker.datatype.boolean(),
		ausweisart: Enums.Ausweisart.VerbrauchsausweisWohnen,
		bestellt: faker.datatype.boolean(),
		boxpruefung: faker.datatype.boolean(),
		brennstoff_2: "Erdgas H",
		brennwert_kessel: faker.datatype.boolean(),
		dachgeschoss_gedaemmt: faker.datatype.boolean(),
		dachgeschoss_min_12cm_gedaemmt: faker.datatype.boolean(),
		doppel_verglasung: faker.datatype.boolean(),
		dreifach_verglasung: faker.datatype.boolean(),
		durchlauf_erhitzer: faker.datatype.boolean(),
		einfach_verglasung: faker.datatype.boolean(),
		einzelofen: faker.datatype.boolean(),
		energieeffizienzklasse: "",
		erledigt: faker.datatype.boolean(),
		erstellungsdatum: faker.date.past(),
		fenster_dicht: faker.datatype.boolean(),
		fenster_teilweise_undicht: faker.datatype.boolean(),
		heizungsrohre_gedaemmt: faker.datatype.boolean(),
		isolier_verglasung: faker.datatype.boolean(),
		keller_decke_gedaemmt: faker.datatype.boolean(),
		keller_wand_gedaemmt: faker.datatype.boolean(),
		leerstand: faker.number.int({ min: 0, max: 20 }),
		niedertemperatur_kessel: faker.datatype.boolean(),
		oberste_geschossdecke_gedaemmt: faker.datatype.boolean(),
		oberste_geschossdecke_min_12cm_gedaemmt: faker.datatype.boolean(),
		photovoltaik: faker.datatype.boolean(),
		prueftext: faker.lorem.sentence(),
		raum_temperatur_regler: faker.datatype.boolean(),
		rolllaeden_kaesten_gedaemmt: faker.datatype.boolean(),
		solarsystem_warmwasser: faker.datatype.boolean(),
		standard_kessel: faker.datatype.boolean(),
		storniert: false,
		tueren_dicht: tuerenDicht,
		tueren_undicht: !tuerenDicht,
		waermepumpe: faker.datatype.boolean(),
		warmwasser_rohre_gedaemmt: faker.datatype.boolean(),
		zentralheizung: faker.datatype.boolean(),
		zirkulation: faker.datatype.boolean(),
		zurueckgestellt: faker.datatype.boolean(),
		uid: faker.string.uuid(),
		ausstellungsdatum: faker.date.past(),
		uid_objekt
	};
}

export function fakeVerbrauchsausweisWohnen(
	seed: number = 42,
	uid_aufnahme: string = faker.string.uuid(),
	uid_objekt: string = faker.string.uuid()
): VerbrauchsausweisWohnenClient {
	faker.seed(seed);

	const verbrauch_1 = faker.number.int({ min: 5000, max: 20000 });
	const verbrauch_4 = faker.number.int({ min: 5000, max: 15000 });

	const ausweis: VerbrauchsausweisWohnenClient = {
		verbrauch_1: verbrauch_1,
		verbrauch_2: verbrauch_1 + faker.number.int({ min: -2000, max: 2000 }),
		verbrauch_3: verbrauch_1 + faker.number.int({ min: -2000, max: 2000 }),
		einheit_1: "kWh",
		warmwasser_enthalten: faker.datatype.boolean(),
		uid: faker.string.uuid(),
		alternative_heizung: faker.datatype.boolean(),
		alternative_kuehlung: faker.datatype.boolean(),
		alternative_lueftung: faker.datatype.boolean(),
		alternative_warmwasser: faker.datatype.boolean(),
		anteil_warmwasser_1: faker.number.int({ min: 0, max: 60 }),
		anteil_warmwasser_2: faker.number.int({ min: 0, max: 60 }),
		ausstellgrund: faker.helpers.enumValue(Enums.Ausstellgrund),
		einheit_2: "kWh",
		keller_beheizt: faker.datatype.boolean(),
		registriernummer: faker.string.uuid(),
		startdatum: faker.date.past({ years: 3 }),
		verbrauch_4: verbrauch_4,
		verbrauch_5: verbrauch_4 + faker.number.int({ min: -2000, max: 2000 }),
		verbrauch_6: verbrauch_4 + faker.number.int({ min: -2000, max: 2000 }),
		warmwasser_anteil_bekannt: faker.datatype.boolean(),
		wird_gekuehlt: faker.datatype.boolean(),
		zusaetzliche_heizquelle: faker.datatype.boolean(),
		faktorKeller: faker.number.float({ min: 0, max: 1 }),
		uid_aufnahme,
		uid_objekt
	};

	return ausweis;
}
