package org.artisanlogiciel.games;

/*
 2x2 Tile to represent a labyrinth position

ab
cd

a is 'H' or '.' or ' '
bcd is 'H' or ' '

*/
public class Brick
{

    public final static short LEFT = 1;
    public final static short DOWN = 2;
    public final static short RIGHT = 4;
    public final static short UP = 8;
    public final static short ENTRY = 16;
    public final static short GOAL = 32;

    char a;
    char b;
    char c;
    char d;
    short walls; // according to LabyModel.getWalls();

    public Brick(char center, char right, char down, char downright, short walls)
    {
        a = center;
        b = right;
        c = down;
        d = downright;
        this.walls = walls;
    }

    public Brick(String up, String low, short walls)
    {
        a = up.charAt(0);
        b = up.charAt(1);
        c = low.charAt(0);
        d = low.charAt(1);
        this.walls = walls;
    }

    private boolean check()
    {
        // Not Yet Implemented
        return false;
    }

    public String getUpString()
    {
        return "" + a + b;
    }

    public String getLowString()
    {
        return "" + c + d;
    }

    public static String getDirLine()
    {
        char dir[] = new char[16];
        String s = "";

        /*
         * dir[LEFT | DOWN | RIGHT | UP]='O'; dir[LEFT | DOWN | RIGHT]='U';
         * dir[LEFT | UP | RIGHT]='M'; dir[LEFT | UP | DOWN]='['; dir[RIGHT | UP
         * | DOWN]=']'; dir[UP | DOWN]='='; dir[LEFT | RIGHT]='|'; dir[RIGHT |
         * DOWN]='J'; dir[LEFT | DOWN]='L'; dir [LEFT | UP]='T'; dir[UP |
         * RIGHT]='7'; dir[LEFT] = '!'; dir[RIGHT] ='|'; dir[DOWN]= '_';
         * dir[UP]= '¨'; dir[0]=' ';
         */

        dir[LEFT | DOWN | RIGHT | UP] = 'O';
        dir[LEFT | DOWN | RIGHT] = 'U';
        dir[LEFT | UP | RIGHT] = 'M';
        dir[LEFT | UP | DOWN] = '[';
        dir[RIGHT | UP | DOWN] = ']';
        dir[UP | DOWN] = '=';
        dir[LEFT | RIGHT] = 226;
        dir[RIGHT | DOWN] = 'J';
        dir[LEFT | DOWN] = 'L';
        dir[LEFT | UP] = 169;
        dir[UP | RIGHT] = 170;
        dir[LEFT] = 173;
        dir[RIGHT] = '|';
        dir[DOWN] = '_';
        dir[UP] = '¨';
        dir[0] = ' ';

        for (int i = 0; i < 16; i++)
        {
            s = s + dir[i];
        }

        return s;

    }

    public char getChar()
    {
        // return getDirLine().charAt(walls & 0xFFF0);
        return getDirLine().charAt(walls);
    }

    public short getWalls()
    {
        return walls;
    }
}
