/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   ft_read_map.c                                      :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: hexplor <marvin@42.fr>                     +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2023/12/25 18:43:17 by hexplor           #+#    #+#             */
/*   Updated: 2024/02/23 22:45:15 by yantoine         ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include "../so_long.h"

static char	*supprimer_backslash_n(char *ligne)
{
	int		i;
	char	*ligne_propre;

	i = 0;
	ligne_propre = malloc(sizeof(char) * ft_strlen(ligne) + 1);
	if (!ligne_propre)
		return (NULL);
	while (ligne[i] && ligne[i] != '\n')
	{
		ligne_propre[i] = ligne[i];
		i++;
	}
	free(ligne);
	ligne_propre[i] = '\0';
	return (ligne_propre);
}

static int	nombre_de_ligne(char *file_name)
{
	int		fd;
	int		compteur_ligne;
	char	*line;

	compteur_ligne = 0;
	fd = open(file_name, O_RDONLY);
	if (fd == -1)
		exit(1);
	while (1)
	{
		line = get_next_line(fd);
		if (!line)
			break ;
		free(line);
		compteur_ligne++;
	}
	close(fd);
	return (compteur_ligne);
}

char	**ft_read_map(char *file_name)
{
	int		fd;
	int		compteur_ligne;
	char	*ligne;
	char	**carte;

	compteur_ligne = 0;
	ligne = NULL;
	carte = malloc(sizeof(char *) * (nombre_de_ligne(file_name) + 1));
	fd = open(file_name, O_RDONLY);
	if (!carte || fd == -1)
		return (NULL);
	while (1)
	{
		ligne = get_next_line(fd);
		if (!ligne)
			break ;
		ligne = supprimer_backslash_n(ligne);
		carte[compteur_ligne] = ft_strdup(ligne);
		free(ligne);
		compteur_ligne++;
	}
	close(fd);
	carte[compteur_ligne] = NULL;
	return (carte);
}
