//
//  Fil d'Ariane.c
//  labyrinthe
//
//  Created by léo LELLOUCHE on 07/04/2016.
//  Copyright © 2016 léo LELLOUCHE. All rights reserved.
//

#include "../header.h"

void    affichage_sortie_ariane(char **labyrinthe, char **map, int size, int i)
{
    
    if (labyrinthe[size - 1][i] == SORTIE)
    {
        map[size - 1][i] = SORTIE;
        return;
    }
    
    if (labyrinthe[size - 1][(2 * size) + 1 - i] == SORTIE)
    {
        map[size - 1][(2 * size) + 1 - i] = SORTIE;
        return;
    }
    
    if (labyrinthe[i][(2 * size) + 1] == SORTIE)
    {
        map[i][(2 * size) + 1] = SORTIE;
        return;
    }
    affichage_sortie_ariane(labyrinthe, map, size, i + 1);
}

char    **map_fil(int size_tab, char **labyrinthe)
{
    char **affichage;
    
    affichage = malloc(sizeof(char *) * size_tab);
    malloc_2d_map(affichage, size_tab, 0);
    sp_grid(affichage, size_tab, 0, 0);
    mur_exterieur(affichage, size_tab, 0);
    affichage_sortie_ariane(labyrinthe, affichage, size_tab, 1);
    return (affichage);
}

void    ajout_bonus_sur_map(char **labyrinthe, int i, int j)
{
    static int modulo = 50;
    static int modulo_temps = 50;
    
    if (labyrinthe[i][j] == SP)
    {
        if ((rand() % modulo) == 0)
        {
            labyrinthe[i][j] = BONUS_MAP;
            modulo = modulo + ((250 - modulo)/5);
        }
        if ((rand() % modulo_temps) == 0)
        {
            labyrinthe[i][j] = BONUS_TEMPS;
            modulo_temps = modulo_temps + ((250 - modulo-modulo_temps)/7);
        }
    }

    if ((i % 2 == 1) && ((labyrinthe[i][1] == MUR_EXT) || (labyrinthe[i][1] == SORTIE)))
        return;
    else if ((labyrinthe[i][j] == SORTIE) || (labyrinthe[i - 1][j] == SORTIE))
        ajout_bonus_sur_map(labyrinthe, i + 2, 1);
    else if ((labyrinthe[i][j] == MUR_EXT) && (labyrinthe[i][j - 1] == MUR_EXT) && (labyrinthe[i - 1][j] == MUR_EXT) && (labyrinthe[i - 1][j - 1] == MUR_EXT))
        ajout_bonus_sur_map(labyrinthe, i + 2, 1);
    else
        ajout_bonus_sur_map(labyrinthe, i, j + 2);
}

void    affichage_fil(char **labyrinthe, char **affichage, t_point position, int *fd)
{
    affichage[min_0(position.line - 2)][min_0(position.col - 2)] = labyrinthe[min_0(position.line - 2)][min_0(position.col - 2)];
    affichage[min_0(position.line - 2)][min_0(position.col - 1)] = labyrinthe[min_0(position.line - 2)][min_0(position.col - 1)];
    affichage[min_0(position.line - 2)][position.col] = labyrinthe[min_0(position.line - 2)][position.col];
    affichage[min_0(position.line - 2)][position.col + 1] = labyrinthe[min_0(position.line - 2)][position.col + 1];
    affichage[min_0(position.line - 2)][position.col + 2] = labyrinthe[min_0(position.line - 2)][position.col + 2];
    
    affichage[min_0(position.line - 1)][min_0(position.col - 2)] = labyrinthe[min_0(position.line - 1)][min_0(position.col - 2)];
    affichage[min_0(position.line - 1)][min_0(position.col - 1)] = labyrinthe[min_0(position.line - 1)][min_0(position.col - 1)];
    affichage[min_0(position.line - 1)][position.col] = labyrinthe[min_0(position.line - 1)][position.col];
    affichage[min_0(position.line - 1)][position.col + 1] = labyrinthe[min_0(position.line - 1)][position.col + 1];
    affichage[min_0(position.line - 1)][position.col + 2] = labyrinthe[min_0(position.line - 1)][position.col + 2];
    
    affichage[position.line][min_0(position.col - 2)] = labyrinthe[position.line][min_0(position.col - 2)];
    affichage[position.line][min_0(position.col - 1)] = labyrinthe[position.line][min_0(position.col - 1)];
    affichage[position.line][position.col] = 'x';
    affichage[position.line][position.col + 1] = labyrinthe[position.line][position.col + 1];
    affichage[position.line][position.col + 2] = labyrinthe[position.line][position.col + 2];
    
    affichage[position.line + 1][min_0(position.col - 2)] = labyrinthe[position.line + 1][min_0(position.col - 2)];
    affichage[position.line + 1][min_0(position.col - 1)] = labyrinthe[position.line + 1][min_0(position.col - 1)];
    affichage[position.line + 1][position.col] = labyrinthe[position.line + 1][position.col];
    affichage[position.line + 1][position.col + 1] = labyrinthe[position.line + 1][position.col + 1];
    affichage[position.line + 1][position.col + 2] = labyrinthe[position.line + 1][position.col + 2];
    
    affichage[position.line + 2][min_0(position.col - 2)] = labyrinthe[position.line + 2][min_0(position.col - 2)];
    affichage[position.line + 2][min_0(position.col - 1)] = labyrinthe[position.line + 2][min_0(position.col - 1)];
    affichage[position.line + 2][position.col] = labyrinthe[position.line + 2][position.col];
    affichage[position.line + 2][position.col + 1] = labyrinthe[position.line + 2][position.col + 1];
    affichage[position.line + 2][position.col + 2] = labyrinthe[position.line + 2][position.col + 2];
    
    print_tab(affichage, 0, 1);
    ftruncate(fd[4], 0);
    lseek(fd[4], 0, SEEK_SET);
    
    print_tab(affichage, 0, fd[4]);
}