#include "Png_Funcs.h"

/*
void read_row_callback(png_ptr ptr, png_uint_32 row,
int pass);
{
}
*/
int Load_Terrain(struct image_attr *ia, char *filename){
	FILE *fp = fopen(filename, "rb");
	if(!fp){
		printf("Error opening file: %s\n", filename);
		return 1;
	}
	char header[8];
	fread(&header, 1, 8, fp);
	int is_png = !png_sig_cmp((png_bytep)&header, 0, 8);
	if(!is_png){
		return 1;
	}

	//png_set_sig_bytes_read() 

	png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
	if(!png_ptr){
		printf("Error creating png read structure!\n");
		return 1;
	}
	png_infop info_ptr = png_create_info_struct(png_ptr);
	if(!info_ptr){
		printf("Error creating png info struct\n");
		png_destroy_read_struct(&png_ptr,(png_infopp)NULL, (png_infopp)NULL);
		return 1;
	}
	//png_uint_32 height = png_get_image_height (png_structp png_ptr, png_infop info_ptr);
	//png_uint_32 width = png_get_image_width (png_structp png_ptr, png_infop info_ptr); 
	png_set_sig_bytes(png_ptr, 8);
	png_init_io(png_ptr, fp);
	//png_set_read_status_fn(png_ptr, read_row_callback);
	//png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL);
	png_uint_32 height = png_get_image_height( (png_structp)png_ptr, (png_infop)info_ptr);
	png_uint_32 width = png_get_image_width( (png_structp)png_ptr, (png_infop)info_ptr);
	char **row_pointers = malloc(sizeof(char *)*height);
	//struct image_attr *ia
	ia->image = malloc(sizeof(char)*height*width);
	int count1;
	for(count1=0; count1<height; count1++){
		row_pointers[count1] = &ia->image[count1*width];
	}
	png_read_image(png_ptr, (png_bytepp)row_pointers);
	free(row_pointers);
	ia->width = width;
	ia->height = height;
	return 0;
}