#ifndef _FACTURAS_H_
#define _FACTURAS_H_

#include "emufs.h"
#include "form.h"
#include "common.h"
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <curses.h>
#include <libxml/tree.h>
#include <libxml/parser.h>
#include "gui.h"

typedef struct _t_item_ {
	int numero;
	char cv[9];
	char pvu[9];
} t_Item;

/* Dejo los campos numericos al principio para mayor facilidad de parseo. */
typedef struct _facturas_ {
	int numero;
	float procdoi;
	int numero_remito;
	int cant_items;
	EMUFS_BLOCK_ID reg_nota;
	char emision[9];
	char vencimiento[9];
	char estado[3];
	char fp[3];
	char ctacte[6];
	char cheque[19];
	char *nota;
	t_Item *items;
} t_Factura;

typedef struct _reg_factura_ {
	EMUFS_REG_ID num_reg; /* numero de registro en el archivo */
	EMUFS_REG_ID texto_reg; /* numero de registro donde se encuentra el texto */
	unsigned int numero; /* codigo de factura */
	struct _reg_factura_ *sig, *ant;
} t_Reg_Factura;

typedef struct _lista_facturas_ {
	t_Reg_Factura *primero;
	EMUFS *fp; /* Filepointer al archivo donde estan los datos */
	EMUFS *fp_texto; /* Filepointer al archivo donde estan los textos */
} t_LstFacturas;


/** Crea la lista de facturas desde un archivo nuevo o existente
 *
 *  \param filename Si es NULL trata de abrir un archivo existente, si no cargar el XML pasado
 */
t_LstFacturas *fact_cargar(t_Parametros *param);

/** Elimina toda la memoria utilizada por las facturas */
int fact_liberar(t_LstFacturas *l);

/** Agregar una factura */
void fact_agregar(char *s);

/** Modificar una factura */
void fact_modificar(char *s);

/** Eliminar una factura */
void fact_eliminar(char *s);

/** Obtiene la list de facturas */
t_LstFacturas *fact_get_lst();

void fact_reformatear(int tipo, int tam_bloque, int tam_reg, int nota_tipo, int nota_tam_bloque, int nota_tam_registro);

void fact_consultas(char *s);

int fact_exportar_xml(const char *filename);

#endif