enum TetrominoTypes {
    I = 0,
    J,
    L,
    O,
    S,
    T,
    Z,
    TETROMINO_COUNT
};

enum Direction {
    NORTH = 0,
    EAST,
    SOUTH,
    WEST
};

struct Tetromino {
    int size;
    struct Color color;
    int directions[4][4][4];
    int cw_kick_table[4][10];
    int ccw_kick_table[4][10];
};

struct Tetromino tetrominos[7] = {
    [I] = {
        .size = 4,
        .color = SKYBLUE,
        .directions = {
            [NORTH] = {
                {0, 0, 0, 0},
                {0, 0, 0, 0},
                {1, 1, 1, 1},
                {0, 0, 0, 0}
            
            },
            [EAST] = {
                {0, 0, 1, 0},
                {0, 0, 1, 0},
                {0, 0, 1, 0},
                {0, 0, 1, 0}
            },
            [SOUTH] = {
                {0, 0, 0, 0},
                {1, 1, 1, 1},
                {0, 0, 0, 0},
                {0, 0, 0, 0}
            },
            [WEST] = {
                {0, 1, 0, 0},
                {0, 1, 0, 0},
                {0, 1, 0, 0},
                {0, 1, 0, 0}
            }
        },
        .cw_kick_table = {
            {+0,+0, -2,+0, +1,+0, -2,-1, +1,+2},
            {+0,+0, -1,+0, +2,+0, -1,+2, +2,-1},
            {+0,+0, +2,+0, -1,+0, +2,+1, -1,-2},
            {+0,+0, +1,+0, -2,+0, +1,-2, -2,+1}
        },
        .ccw_kick_table = {
            {+0,+0, -1,+0, +2,+0, -1,+2, +2,-1},
            {+0,+0, +2,+0, -1,+0, +2,+1, -1,-2},
            {+0,+0, +1,+0, -2,+0, +1,-2, -2,+1},
            {+0,+0, -2,+0, +1,+0, -2,-1, +1,+2}
        }
    },
    [J] = {
        .size = 3,
        .color = BLUE,
        .directions = {
            [NORTH] = {
                {0, 0, 0},
                {1, 1, 1},
                {1, 0, 0}
            },
            [EAST] = {
                {0, 1, 0},
                {0, 1, 0},
                {0, 1, 1}
            },
            [SOUTH] = {
                {0, 0, 1},
                {1, 1, 1},
                {0, 0, 0}
            },
            [WEST] = {
                {1, 1, 0},
                {0, 1, 0},
                {0, 1, 0}
            }
        },
        .cw_kick_table = {
            {+0,+0, -1,+0, -1,+1, +0,-2, -1,-2},
            {+0,+0, +1,+0, +1,-1, +0,+2, +1,+2},
            {+0,+0, +1,+0, +1,+1, +0,-2, +1,-2},
            {+0,+0, -1,+0, -1,-1, +0,+2, -1,+2}
        },
        .ccw_kick_table = {
            {+0,+0, +1,+0, +1,+1, +0,-2, +1,-2},
            {+0,+0, +1,+0, +1,-1, +0,+2, +1,+2},
            {+0,+0, -1,+0, -1,+1, +0,-2, -1,-2},
            {+0,+0, -1,+0, -1,-1, +0,+2, -1,+2}
        }
    },
    [L] = {
        .size = 3,
        .color = ORANGE,
        .directions = {
            [NORTH] = {
                {0, 0, 0},
                {1, 1, 1},
                {0, 0, 1}
            },
            [EAST] = {
                {0, 1, 1},
                {0, 1, 0},
                {0, 1, 0}
            },
            [SOUTH] = {
                {1, 0, 0},
                {1, 1, 1},
                {0, 0, 0}
            },
            [WEST] = {
                {0, 1, 0},
                {0, 1, 0},
                {1, 1, 0}
            }
        },
        .cw_kick_table = {
            {+0,+0, -1,+0, -1,+1, +0,-2, -1,-2},
            {+0,+0, +1,+0, +1,-1, +0,+2, +1,+2},
            {+0,+0, +1,+0, +1,+1, +0,-2, +1,-2},
            {+0,+0, -1,+0, -1,-1, +0,+2, -1,+2}
        },
        .ccw_kick_table = {
            {+0,+0, +1,+0, +1,+1, +0,-2, +1,-2},
            {+0,+0, +1,+0, +1,-1, +0,+2, +1,+2},
            {+0,+0, -1,+0, -1,+1, +0,-2, -1,-2},
            {+0,+0, -1,+0, -1,-1, +0,+2, -1,+2}
        }
    },
    [O] = {
        .size = 3,
        .color = YELLOW,
        .directions = {
            [NORTH] = {
                {0, 0, 0},
                {0, 1, 1},
                {0, 1, 1}
            },
            [EAST] = {
                {0, 0, 0},
                {0, 1, 1},
                {0, 1, 1}
            },
            [SOUTH] = {
                {0, 0, 0},
                {0, 1, 1},
                {0, 1, 1}
            },
            [WEST] = {
                {0, 0, 0},
                {0, 1, 1},
                {0, 1, 1}
            }
        },
        .cw_kick_table = {
            {+0,+0, +0,+0, +0,+0, +0,+0, +0,+0},
            {+0,+0, +0,+0, +0,+0, +0,+0, +0,+0},
            {+0,+0, +0,+0, +0,+0, +0,+0, +0,+0},
            {+0,+0, +0,+0, +0,+0, +0,+0, +0,+0}
        },
        .ccw_kick_table = {
            {+0,+0, +0,+0, +0,+0, +0,+0, +0,+0},
            {+0,+0, +0,+0, +0,+0, +0,+0, +0,+0},
            {+0,+0, +0,+0, +0,+0, +0,+0, +0,+0},
            {+0,+0, +0,+0, +0,+0, +0,+0, +0,+0}
        }
    },
    [S] = {
        .size = 3,
        .color = GREEN,
        .directions = {
            [NORTH] = {
                {0, 0, 0},
                {1, 1, 0},
                {0, 1, 1}
            },
            [EAST] = {
                {0, 0, 1},
                {0, 1, 1},
                {0, 1, 0}
            },
            [SOUTH] = {
                {1, 1, 0},
                {0, 1, 1},
                {0, 0, 0}
            },
            [WEST] = {
                {0, 1, 0},
                {1, 1, 0},
                {1, 0, 0}
            }
        },
        .cw_kick_table = {
            {+0,+0, -1,+0, -1,+1, +0,-2, -1,-2},
            {+0,+0, +1,+0, +1,-1, +0,+2, +1,+2},
            {+0,+0, +1,+0, +1,+1, +0,-2, +1,-2},
            {+0,+0, -1,+0, -1,-1, +0,+2, -1,+2}
        },
        .ccw_kick_table = {
            {+0,+0, +1,+0, +1,+1, +0,-2, +1,-2},
            {+0,+0, +1,+0, +1,-1, +0,+2, +1,+2},
            {+0,+0, -1,+0, -1,+1, +0,-2, -1,-2},
            {+0,+0, -1,+0, -1,-1, +0,+2, -1,+2}
        }
    },
    [T] = {
        .size = 3,
        .color = PURPLE,
        .directions = {
            [NORTH] = {
                {0, 0, 0},
                {1, 1, 1},
                {0, 1, 0}
            },
            [EAST] = {
                {0, 1, 0},
                {0, 1, 1},
                {0, 1, 0}
            },
            [SOUTH] = {
                {0, 1, 0},
                {1, 1, 1},
                {0, 0, 0}
            },
            [WEST] = {
                {0, 1, 0},
                {1, 1, 0},
                {0, 1, 0}
            }
        },
        .cw_kick_table = {
            {+0,+0, -1,+0, -1,+1, +0,-2, -1,-2},
            {+0,+0, +1,+0, +1,-1, +0,+2, +1,+2},
            {+0,+0, +1,+0, +1,+1, +0,-2, +1,-2},
            {+0,+0, -1,+0, -1,-1, +0,+2, -1,+2}
        },
        .ccw_kick_table = {
            {+0,+0, +1,+0, +1,+1, +0,-2, +1,-2},
            {+0,+0, +1,+0, +1,-1, +0,+2, +1,+2},
            {+0,+0, -1,+0, -1,+1, +0,-2, -1,-2},
            {+0,+0, -1,+0, -1,-1, +0,+2, -1,+2}
        }
    },
    [Z] = {
        .size = 3,
        .color = RED,
        .directions = {
            [NORTH] = {
                {0, 0, 0},
                {0, 1, 1},
                {1, 1, 0}
            },
            [EAST] = {
                {0, 1, 0},
                {0, 1, 1},
                {0, 0, 1}
            },
            [SOUTH] = {
                {0, 1, 1},
                {1, 1, 0},
                {0, 0, 0}
            },
            [WEST] = {
                {1, 0, 0},
                {1, 1, 0},
                {0, 1, 0}
            }
        },
        .cw_kick_table = {
            {+0,+0, -1,+0, -1,+1, +0,-2, -1,-2},
            {+0,+0, +1,+0, +1,-1, +0,+2, +1,+2},
            {+0,+0, +1,+0, +1,+1, +0,-2, +1,-2},
            {+0,+0, -1,+0, -1,-1, +0,+2, -1,+2}
        },
        .ccw_kick_table = {
            {+0,+0, +1,+0, +1,+1, +0,-2, +1,-2},
            {+0,+0, +1,+0, +1,-1, +0,+2, +1,+2},
            {+0,+0, -1,+0, -1,+1, +0,-2, -1,-2},
            {+0,+0, -1,+0, -1,-1, +0,+2, -1,+2}
        }
    }
};