
#include "../header.h"



int     clean_map(char **tab, int i, int j)
{
    if (tab[i][j] == MUR_EXT)
        return (1);
    if ((tab[i][j] == SORTIE) && (j == 1))
        return (1);
    if (tab[i][j] == MUR_INT)
        tab[i][j] = MUR_EXT;
    if ((tab[i][j] == CUL_DE_SAC) || (tab[i][j] == CHEMIN_PRIS))
        tab[i][j] = SP;
    if (tab[i][j + 1] == MUR_EXT)
        return (clean_map(tab, i + 1, 1));
    return (clean_map(tab, i, j + 1));
}

int     *verif_possibilite_deplacement(char **tab, t_point position, int size, char verif)
{
    int *dir_possible;
    
    dir_possible = malloc(sizeof(int) * 4);
    dir_possible[0] = 0;
    dir_possible[1] = 0;
    dir_possible[2] = 0;
    dir_possible[3] = 0;
    
    if (((position.line - 2) >= 0) && ((tab[position.line - 2][position.col] == SP) || (tab[position.line - 2][position.col] == verif)))
        dir_possible[0] = 1;
    
    if (((position.col + 2) <= 2 * size + 1) && ((tab[position.line][position.col + 2] == SP) || (tab[position.line][position.col + 2] == verif)))
        dir_possible[1] = 1;
    if (((position.line + 2) <= size) && ((tab[position.line + 2][position.col] == SP) || (tab[position.line + 2][position.col] == verif)))
        dir_possible[2] = 1;
    
    if (((position.col - 2) >= 0) && ((tab[position.line][position.col - 2] == SP) || (tab[position.line][position.col - 2] == verif)))
        dir_possible[3] = 1;
    
    if ((dir_possible[0] != 1) && (dir_possible[1] != 1) && (dir_possible[2] != 1) && (dir_possible[3] != 1))
    {
        free(dir_possible);
        return (NULL);
    }
    
    return (dir_possible);
}


int     generer_direction_rand(int *dir_possible)
{
    int i;
    
    i = (rand() % 5);
    
    if (i == 4)
        i = 1;
    if (dir_possible[i] != 1)
        return (generer_direction_rand(dir_possible));
    return (i);
}


char    **generation(int size, t_list *chemin, int *size_chemin)
{
    
    char    **tab;
    t_point depart;
    
    tab = generation_map_vide(size, &depart);
    (*chemin).col = depart.col;
    (*chemin).line = depart.line;
    (*chemin).next = NULL;
    
    lstnew(depart.col, depart.line, chemin);
    *size_chemin = creation_chemin(tab, depart, chemin, size);
    generation_culs_sac(tab, size);
    clean_map(tab, 1, 1);
    ajout_bonus_sur_map(tab, 1, 3);
    return(tab);
}