#include "sudoku.h"


static char * gridchars  = "abcdefghijklmnopqrstuvwxyz";

int * get_box(char c){

     
     unsigned static int result[N];
     unsigned int index = 0;
     unsigned int offset = strchr(gridchars,c) - gridchars;
     offset = offset * N / 3;
     for(unsigned int i = offset; i < offset + N/3;i++){
	result[index] = i;
	index++;
     }
     for(unsigned int i = offset + N; i < offset + N +  N/3;i++){
	result[index] = i;
	index++;
     }
     for(unsigned int i = offset + N + N; i < offset + N + N +  N/3;i++){
	result[index] = i;
	index++;
     }
     return result;
}
int * grid_to_array(int grid[N][N]){
	static int result[N*N];
	int index = 0;
	for(uint row = 0; row < N; row++){
	    for(uint col = 0; col < N; col++){
		result[index] = grid[row][col];
		index++;
	    }
	}
	return result;
}

char get_box_char(int row, int col){
	unsigned int index = 0;
	unsigned int cell_index = row * N + col;
	int char_index = cell_index / N;
	
	while(true){
		char c = gridchars[index];
		int * numbers = get_box(c);
		for(int i = 0; i < N; i++){
			if(numbers[i] == cell_index){
				return c;
			}
		}
		index++;
	}
	return 0;
}

int * get_box_values(int grid[N][N],char c){
     int * box = get_box(c);
     static unsigned int values[N];
     int * array = grid_to_array(grid);
     //printf("HIERR\n");
     for(unsigned int i = 0; i < N; i++){
	 printf("FROM ARRAY: %d\n", box[i]);
	     values[i] = array[box[i]];
     }
     return values;
}

void print_box(int * box){
     unsigned int cols = 0;
     for(int i = 0; i < N; i++){
	printf("%d", box[i]);
	cols++;
	if(cols == N / 3){
		printf("\n");
		cols = 0;
	}
     }
}

int main(){
    int grid[N][N];  // = grid_new();
    memset(grid,0,N*N*sizeof(int));
    int * box = get_box('d');
    for(int i = 0; i < N; i++){
	printf("%d\n",box[i]);
    }
    grid[4][2] = 9;
    int * box_values = get_box_values(grid,'d');
    print_box(box_values);

    int row = 4;
    int col = 0;
    grid[row][col] = 8;
    print_grid(grid,false);
    
    printf("%c",get_box_char(row,col));
    return 0;

}