//
//  generation_map_vide.c
//  labyrinthe
//
//  Created by léo LELLOUCHE on 16/03/2016.
//  Copyright © 2016 léo LELLOUCHE. All rights reserved.
//

#include "../header.h"

void    malloc_2d_map(char **tab, int size, int i)
{
    if (i < size)
    {
        
        tab[i] = calloc(sizeof(char), (2 * size) + 3);
        malloc_2d_map(tab, size, i + 1);
    }
}


void    mur_exterieur(char **tab, int size, int i)
{
    // Première ligne
    tab[0][i + 1] = tab[0][(2 * size) - i] = MUR_EXT;
    
    //Première colonne
    tab[i][0] = MUR_EXT;
    
    // Dernière ligne
    tab[size - 1][i + 1] = tab[size - 1][(2 * size) - i] = MUR_EXT;
    
    // Dernière colonne
    tab[i][2 * size + 1] = MUR_EXT;
    
    i++;
    if (i < size)
        mur_exterieur(tab, size, i);
}

int     sp_grid(char **tab, int size, int i, int j)
{
    if (i >= size)
        return(0);
    
    else if (j >= (2 * size + 1))
        sp_grid(tab, size, i + 1, 0);
    else
    {
        tab[i][j] = SP;
        sp_grid(tab, size, i, j + 1);
    }
    return (0);
}

int    mur_interieur(char **tab, int size, int i, int j)
{
    
    if (i >= size)
        return(0);
    else if (j >= (2 * size + 1))
        mur_interieur(tab, size, i + 1, 0);
    else
    {
        if (((i % 2) == 0) || ((j % 2) == 0))
            tab[i][j] = MUR_INT;
        mur_interieur(tab, size, i, j + 1);
    }
    return (0);

}

char    **generation_map_vide(int size, t_point *depart)
{
    char **tab;
    tab = malloc(sizeof(char *) * size);
    malloc_2d_map(tab, size, 0);
    sp_grid(tab, size, 0, 0);
    mur_interieur(tab, size, 0, 0);
    mur_exterieur(tab, size, 0);
    (*depart).line = 1;
    (*depart).col = 1;
    tab[(*depart).line][0] = ENTREE;
    return (tab);
}

