import { Producto, Size } from "../interfaces/models.js";
/**
* Busca un producto por su descripción
*/
export const findProductoByDescripcion = (productosCache:Producto[], descripcion: string): Producto | null => {
if (!productosCache) {
return null;
}
if(descripcion.trim() === '') {
console.warn("⚠️ Descripción vacía, no se puede buscar producto");
}
const descripcionLower = descripcion.toLowerCase();
const producto =productosCache.find(p =>
p.descripcion.toLowerCase().includes(descripcionLower)
);
return producto || null;
}
/**
* Busca un tamaño por su descripción
*/
export const findSizeByDescripcion = (sizesCache:Size[], descripcion: string): Size | null =>{
if (!sizesCache) {
return null;
}
const descripcionLower = descripcion.toLowerCase();
const size = sizesCache.find(s =>
s.descripcion.toLowerCase().includes(descripcionLower)
);
return size || null;
}
/**
* Convierte una fecha string a formato timestamp
*/
export const fechaToTimestamp = (fechaStr: string): { seconds: number; nanoseconds: number } => {
try {
// Formatos de fecha soportados
const formatos = [
/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/, // YYYY-MM-DD HH:MM:SS
/^\d{4}-\d{2}-\d{2}$/, // YYYY-MM-DD
/^\d{2}\/\d{2}\/\d{4} \d{2}:\d{2}:\d{2}$/, // DD/MM/YYYY HH:MM:SS
/^\d{2}\/\d{2}\/\d{4}$/, // DD/MM/YYYY
/^\d{2}-\d{2}-\d{4} \d{2}:\d{2}:\d{2}$/, // DD-MM-YYYY HH:MM:SS
/^\d{2}-\d{2}-\d{4}$/, // DD-MM-YYYY
];
let fechaObj: Date | null = null;
// Intentar parsear con diferentes formatos
if (formatos[0].test(fechaStr) || formatos[1].test(fechaStr)) {
// Formato ISO (YYYY-MM-DD)
fechaObj = new Date(fechaStr);
} else if (formatos[2].test(fechaStr) || formatos[3].test(fechaStr)) {
// Formato DD/MM/YYYY
const partes = fechaStr.split(/[\/\s]/);
const [dia, mes, año] = partes[0].split('/');
const tiempo = partes[1] || '00:00:00';
fechaObj = new Date(`${año}-${mes}-${dia} ${tiempo}`);
} else if (formatos[4].test(fechaStr) || formatos[5].test(fechaStr)) {
// Formato DD-MM-YYYY
const partes = fechaStr.split(/[\-\s]/);
const [dia, mes, año] = partes[0].split('-');
const tiempo = partes[1] || '00:00:00';
fechaObj = new Date(`${año}-${mes}-${dia} ${tiempo}`);
}
if (!fechaObj || isNaN(fechaObj.getTime())) {
throw new Error(`Formato de fecha no reconocido: ${fechaStr}`);
}
const timestamp = Math.floor(fechaObj.getTime() / 1000);
return {
seconds: timestamp,
nanoseconds: 0
};
} catch (error) {
console.error(`❌ Error convirtiendo fecha: ${error}`);
// Fecha por defecto (24 horas desde ahora)
const timestamp = Math.floor(Date.now() / 1000) + 86400;
return {
seconds: timestamp,
nanoseconds: 0
};
}
}
export function getStartOfWeek(date = new Date()) {
const d = new Date(date);
const day = d.getDay();
const diff = d.getDate() - day + (day === 0 ? -6 : 1); // Ajustar para que lunes sea el primer día
return new Date(d.setDate(diff));
}
// Obtener el final de la semana (domingo)
export function getEndOfWeek(date = new Date()) {
const d = new Date(date);
const day = d.getDay();
const diff = d.getDate() - day + (day === 0 ? 0 : 7); // Ajustar para que domingo sea el último día
return new Date(d.setDate(diff));
}