/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   parsing_header2.c                                  :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: cchauvet <marvin@42.fr>                    +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2023/05/16 17:28:58 by cchauvet          #+#    #+#             */
/*   Updated: 2023/06/16 16:31:06 by cchauvet         ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include "./parsing_private.h"

int	set_texture(t_map *map, int token, const char *key, const char *value)
{
	if (map->img_path[token - 1] != NULL)
	{
		ft_eprintf("redefinition of %s", key);
		return (1);
	}
	map->img_path[token - 1] = ft_strdup(value);
	if (map->img_path[token - 1] == NULL)
		return (1);
	return (0);
}

static unsigned int	get_rgb(unsigned char red, unsigned char green,
		unsigned char blue)
{
	return (red << 24 | green << 16 | blue << 8 | 255);
}

static long long	get_color(const char **tab)
{
	long long	rgb[3];
	size_t		i;

	i = 0;
	while (i < 3)
	{
		if (ft_atoul_check(tab[i]) == 0)
		{
			ft_eprintf("map: %s color invalid format", tab[i]);
			return (-1);
		}
		rgb[i] = ft_atoul(tab[i]);
		if (rgb[i] > 255)
		{
			ft_eprintf("map: %s is a to high to be a color", tab[i]);
			return (-1);
		}
		i++;
	}
	return (get_rgb((unsigned char) rgb[0],
			(unsigned char) rgb[1], (unsigned char) rgb[2]));
}

int	set_color(long long *color, const char *key, const char *value)
{
	char	**tab;

	if (*color != -1)
	{
		ft_eprintf("map: %s redefinition", key);
		return (1);
	}
	if (ft_count(value, ',') != 2)
	{
		ft_eprintf("map: invalid format %s %s", key, value);
		return (1);
	}
	tab = ft_split(value, ',');
	if (tab == NULL)
		return (1);
	*color = get_color((const char **) tab);
	ft_freer_tab_ultimate(1, tab);
	return (*color == -1);
}

int	check_header_is_complete(t_map *map)
{
	if (map->img_path[0] == NULL)
		ft_eprintf("map: incomplete: Nord texture is missing");
	else if (map->img_path[1] == NULL)
		ft_eprintf("map: incomplete: WEST texture is missing");
	else if (map->img_path[2] == NULL)
		ft_eprintf("map: incomplete: SOUTH texture is missing");
	else if (map->img_path[3] == NULL)
		ft_eprintf("map: incomplete: EAST texture is missing");
	else if (map->color_bot == -1)
		ft_eprintf("map: incomplete: floor color is missing");
	else if (map->color_top == -1)
		ft_eprintf("map: incomplete: roof color is missing");
	else
		return (0);
	return (1);
}
