<?php
    $_id = isset($_GET['i']) ? intval($_GET['i']) : 0;
    $_borders = isset($_GET['borders']) ? trim(strval($_GET['borders'])) : 'TLTCTRMLMCMRBLBCBR';
    
    if ($_id && $_x && $_y)
    {
        $quilts = mysqli_query_logged("SELECT * FROM quilts WHERE id = " . sq($_id));
        if ($quilts_row = mysqli_fetch_assoc($quilts))
        {
            //DO THE IMAGE WRAP THING
            $x_minus = $_x - 1;
            $x_plus = $_x + 1;
            $y_minus = $_y - 1;
            $y_plus = $_y + 1;
            if ($quilts_row['edge_wrap'] == 1 || $quilts_row['edge_wrap'] == 3)
            {
                if ($x_minus < 1)
                {
                    $x_minus = $quilts_row['quilt_width'];
                }
                if ($x_plus > $quilts_row['quilt_width'])
                {
                    $x_plus = 1;
                }
            }
            if ($quilts_row['edge_wrap'] == 2 || $quilts_row['edge_wrap'] == 3)
            {
                if ($y_minus < 1)
                {
                    $y_minus = $quilts_row['quilt_height'];
                }
                if ($y_plus > $quilts_row['quilt_height'])
                {
                    $y_plus = 1;
                }
            }
            //CREATE THE IMAGE
            $im_dest = imagecreatetruecolor($quilts_row['tile_width'] + $quilts_row['side_pixels'] * 2, $quilts_row['tile_height'] + $quilts_row['side_pixels'] * 2);
            $grey1 = imagecolorallocate($im_dest, 128, 128, 128);
            $grey2 = imagecolorallocate($im_dest, 64, 64, 64);
            $xcols = $quilts_row['tile_width'] + $quilts_row['side_pixels'] * 2;
            $ycols = $quilts_row['tile_height'] + $quilts_row['side_pixels'] * 2;
            $x = 0;
            while ($x < $xcols / 8)
            {
                $y = 0;
                while ($y < $ycols / 8)
                {
                    imagefilledrectangle($im_dest, $x * 8, $y * 8, $x * 8 + 8, $y * 8 + 8, (($y + $x) % 2 == 0 ? $grey1 : $grey2));
                    $y++;
                }
                $x++;
            }
            //imagefill($im_dest, 0, 0, 0);
            $white = imagecolorallocate($im_dest, 255, 255, 255);
            imagefilledrectangle($im_dest, $quilts_row['side_pixels'], $quilts_row['side_pixels'], $quilts_row['tile_width'] + $quilts_row['side_pixels'] - 1, $quilts_row['tile_height'] + $quilts_row['side_pixels'] - 1, $white);
            //TOP LEFT
            $pos = strpos($_borders, 'TL');
            if ($pos !== false)
            {
                $tiles_new = mysqli_query_logged("SELECT * FROM tiles WHERE quilt_id = '" . $quilts_row['id'] . "' AND matrix_x = '" . $x_minus . "' AND matrix_y = '" . $y_minus . "' AND deleted = '0'");
                if ($tiles_new_row = mysqli_fetch_assoc($tiles_new))
                {
                    $im_src = imagecreatefromstring($tiles_new_row['data_tile']);
                    imagecopy($im_dest, $im_src, 0, 0, $quilts_row['tile_width'] - $quilts_row['side_pixels'], $quilts_row['tile_height'] - $quilts_row['side_pixels'], $quilts_row['side_pixels'], $quilts_row['side_pixels']);
                }
            }
            //TOP CENTER
            $pos = strpos($_borders, 'TC');
            if ($pos !== false)
            {
                $tiles_new = mysqli_query_logged("SELECT * FROM tiles WHERE quilt_id = '" . $quilts_row['id'] . "' AND matrix_x = '" . $_x . "' AND matrix_y = '" . $y_minus . "' AND deleted = '0'");
                if ($tiles_new_row = mysqli_fetch_assoc($tiles_new))
                {
                    $im_src = imagecreatefromstring($tiles_new_row['data_tile']);
                    imagecopy($im_dest, $im_src, $quilts_row['side_pixels'], 0, 0, $quilts_row['tile_height'] - $quilts_row['side_pixels'], $quilts_row['tile_width'], $quilts_row['side_pixels']);
                }
            }
            //TOP RIGHT
            $pos = strpos($_borders, 'TR');
            if ($pos !== false)
            {
                $tiles_new = mysqli_query_logged("SELECT * FROM tiles WHERE quilt_id = '" . $quilts_row['id'] . "' AND matrix_x = '" . $x_plus . "' AND matrix_y = '" . $y_minus . "' AND deleted = '0'");
                if ($tiles_new_row = mysqli_fetch_assoc($tiles_new))
                {
                    $im_src = imagecreatefromstring($tiles_new_row['data_tile']);
                    imagecopy($im_dest, $im_src, $quilts_row['tile_width'] + $quilts_row['side_pixels'], 0, 0, $quilts_row['tile_height'] - $quilts_row['side_pixels'], $quilts_row['side_pixels'], $quilts_row['side_pixels']);
                }
            }
            //MIDDLE LEFT
            $pos = strpos($_borders, 'ML');
            if ($pos !== false)
            {
                $tiles_new = mysqli_query_logged("SELECT * FROM tiles WHERE quilt_id = '" . $quilts_row['id'] . "' AND matrix_x = '" . $x_minus . "' AND matrix_y = '" . $_y . "' AND deleted = '0'");
                if ($tiles_new_row = mysqli_fetch_assoc($tiles_new))
                {
                    $im_src = imagecreatefromstring($tiles_new_row['data_tile']);
                    imagecopy($im_dest, $im_src, 0, $quilts_row['side_pixels'], $quilts_row['tile_width'] - $quilts_row['side_pixels'], 0, $quilts_row['side_pixels'], $quilts_row['tile_height']);
                }
            }
            //MIDDLE CENTER
            $pos = strpos($_borders, 'MC');
            if ($pos !== false)
            {
                $tiles_new = mysqli_query_logged("SELECT * FROM tiles WHERE quilt_id = '" . $quilts_row['id'] . "' AND matrix_x = '" . $_x . "' AND matrix_y = '" . $_y . "' AND deleted = '0'");
                if ($tiles_new_row = mysqli_fetch_assoc($tiles_new))
                {
                    $im_src = imagecreatefromstring($tiles_new_row['data_tile']);
                    imagecopy($im_dest, $im_src, $quilts_row['side_pixels'], $quilts_row['side_pixels'], 0, 0, $quilts_row['tile_width'], $quilts_row['tile_height']);
                }
            }
            //MIDDLE RIGHT
            $pos = strpos($_borders, 'MR');
            if ($pos !== false)
            {
                $tiles_new = mysqli_query_logged("SELECT * FROM tiles WHERE quilt_id = '" . $quilts_row['id'] . "' AND matrix_x = '" . $x_plus . "' AND matrix_y = '" . $_y . "' AND deleted = '0'");
                if ($tiles_new_row = mysqli_fetch_assoc($tiles_new))
                {
                    $im_src = imagecreatefromstring($tiles_new_row['data_tile']);
                    imagecopy($im_dest, $im_src, $quilts_row['tile_width'] + $quilts_row['side_pixels'], $quilts_row['side_pixels'], 0, 0, $quilts_row['side_pixels'], $quilts_row['tile_height']);
                }
            }
            //BOTTOM LEFT
            $pos = strpos($_borders, 'BL');
            if ($pos !== false)
            {
                $tiles_new = mysqli_query_logged("SELECT * FROM tiles WHERE quilt_id = '" . $quilts_row['id'] . "' AND matrix_x = '" . $x_minus . "' AND matrix_y = '" . $y_plus . "' AND deleted = '0'");
                if ($tiles_new_row = mysqli_fetch_assoc($tiles_new))
                {
                    $im_src = imagecreatefromstring($tiles_new_row['data_tile']);
                    imagecopy($im_dest, $im_src, 0, $quilts_row['tile_height'] + $quilts_row['side_pixels'], $quilts_row['tile_width'] - $quilts_row['side_pixels'], 0, $quilts_row['side_pixels'], $quilts_row['side_pixels']);
                }
            }
            //BOTTOM CENTER
            $pos = strpos($_borders, 'BC');
            if ($pos !== false)
            {
                $tiles_new = mysqli_query_logged("SELECT * FROM tiles WHERE quilt_id = '" . $quilts_row['id'] . "' AND matrix_x = '" . $_x . "' AND matrix_y = '" . $y_plus . "' AND deleted = '0'");
                if ($tiles_new_row = mysqli_fetch_assoc($tiles_new))
                {
                    $im_src = imagecreatefromstring($tiles_new_row['data_tile']);
                    imagecopy($im_dest, $im_src, $quilts_row['side_pixels'], $quilts_row['tile_height'] + $quilts_row['side_pixels'], 0, 0, $quilts_row['tile_width'], $quilts_row['side_pixels']);
                }
            }
            //BOTTOM RIGHT
            $pos = strpos($_borders, 'BR');
            if ($pos !== false)
            {
                $tiles_new = mysqli_query_logged("SELECT * FROM tiles WHERE quilt_id = '" . $quilts_row['id'] . "' AND matrix_x = '" . $x_plus . "' AND matrix_y = '" . $y_plus . "' AND deleted = '0'");
                if ($tiles_new_row = mysqli_fetch_assoc($tiles_new))
                {
                    $im_src = imagecreatefromstring($tiles_new_row['data_tile']);
                    imagecopy($im_dest, $im_src, $quilts_row['tile_width'] + $quilts_row['side_pixels'], $quilts_row['tile_height'] + $quilts_row['side_pixels'], 0, 0, $quilts_row['side_pixels'], $quilts_row['side_pixels']);
                }
            }
            header('content-type: image/png');
            header('content-disposition: inline; filename="' . $quilts_row['id'] . '_' . $_x . '_' . $_y . '.png"');    
            imagepng($im_dest);
        }
        else
        {
            display_empty_image();
        }
    }
    else
    {
        display_empty_image();
    }

    function display_empty_image()
    {
        $im = imagecreatetruecolor(intval(200 + (SIDE_PIXELS * 2)), intval(200 + (SIDE_PIXELS * 2)));
        imagefill($im, 0, 0, 0);
        $white = imagecolorallocate($im, 255, 255, 255);
        imagefilledrectangle($im, SIDE_PIXELS, SIDE_PIXELS, 200 + SIDE_PIXELS - 1, 200 + SIDE_PIXELS - 1, $white);
        header ("Content-type: image/png");
        header('content-disposition: inline; filename="empty.png"');
        imagepng($im);
    }
?>