import { fail, redirect } from '@sveltejs/kit';
import type { Actions, PageServerLoad } from './$types';
import { createHutangPiutang } from '$lib/server/hutang-piutang';
import type { JenisHutangPiutang } from '$lib/types/hutang-piutang';
import { getTodayDateString, isValidDateString, parseRupiahInput } from '$lib/utils/parse';

export const load: PageServerLoad = async () => ({
	tanggalDefault: getTodayDateString()
});

export const actions: Actions = {
	default: async ({ request, locals }) => {
		const formData = await request.formData();
		const jenis = String(formData.get('jenis') ?? '') as JenisHutangPiutang;
		const nama = String(formData.get('nama') ?? '').trim();
		const deskripsi = String(formData.get('deskripsi') ?? '').trim();
		const jumlahRaw = String(formData.get('jumlah') ?? '');
		const tanggal = String(formData.get('tanggal') ?? '').trim();
		const jatuhTempo = String(formData.get('jatuh_tempo') ?? '').trim() || null;
		const jumlah = parseRupiahInput(jumlahRaw);

		const values = { jenis, nama, deskripsi, jumlah: jumlahRaw, tanggal, jatuh_tempo: jatuhTempo ?? '' };

		if (jenis !== 'hutang' && jenis !== 'piutang') {
			return fail(400, { error: 'Jenis tidak valid.', values });
		}
		if (!nama) return fail(400, { error: 'Nama wajib diisi.', values });
		if (jumlah <= 0) return fail(400, { error: 'Jumlah harus lebih dari Rp 0.', values });
		if (!isValidDateString(tanggal)) return fail(400, { error: 'Tanggal tidak valid.', values });
		if (jatuhTempo && !isValidDateString(jatuhTempo)) {
			return fail(400, { error: 'Jatuh tempo tidak valid.', values });
		}

		try {
			await createHutangPiutang({
				memberId: locals.member!.id,
				jenis,
				nama,
				deskripsi,
				jumlah,
				tanggal,
				jatuhTempo
			});
		} catch {
			return fail(500, {
				error: 'Gagal menyimpan ke database. Pastikan MySQL berjalan dan jalankan npm run db:init.',
				values: { jenis, nama, deskripsi, jumlah: jumlahRaw, tanggal, jatuh_tempo: jatuhTempo ?? '' }
			});
		}

		throw redirect(303, '/transaksi/hutang-piutang?success=1');
	}
};
