/**
 * Utilitários para manipulação de datas
 * Resolve problemas de timezone ao trabalhar com datas no formato YYYY-MM-DD
 */

/**
 * Converte uma string de data no formato YYYY-MM-DD para um objeto Date local
 * (sem considerar timezone, garantindo que a data seja interpretada como data local)
 * 
 * @param dateString - String no formato YYYY-MM-DD
 * @returns Date objeto representando a data local (meia-noite no timezone local)
 * 
 * @example
 * parseLocalDate('2024-01-15') // Retorna Date para 15/01/2024 00:00:00 no timezone local
 */
export function parseLocalDate(dateString: string): Date {
	if (!dateString || typeof dateString !== 'string') {
		throw new Error('dateString deve ser uma string válida');
	}

	// Validar formato YYYY-MM-DD
	const dateRegex = /^\d{4}-\d{2}-\d{2}$/;
	if (!dateRegex.test(dateString)) {
		throw new Error('dateString deve estar no formato YYYY-MM-DD');
	}

	// Extrair ano, mês e dia
	const [year, month, day] = dateString.split('-').map(Number);

	// Criar data local (sem considerar timezone)
	// O mês no Date é 0-indexed, então subtraímos 1
	const date = new Date(year, month - 1, day, 0, 0, 0, 0);

	// Validar se a data é válida
	if (isNaN(date.getTime())) {
		throw new Error(`Data inválida: ${dateString}`);
	}

	return date;
}

/**
 * Formata uma data para o formato brasileiro (DD/MM/YYYY)
 * 
 * @param date - Date objeto ou string no formato YYYY-MM-DD
 * @returns String formatada no formato DD/MM/YYYY
 */
export function formatarDataBR(date: Date | string): string {
	let dateObj: Date;
	
	if (typeof date === 'string') {
		dateObj = parseLocalDate(date);
	} else {
		dateObj = date;
	}

	const day = dateObj.getDate().toString().padStart(2, '0');
	const month = (dateObj.getMonth() + 1).toString().padStart(2, '0');
	const year = dateObj.getFullYear();

	return `${day}/${month}/${year}`;
}

