#ifndef DRAWER_H
#define DRAWER_H

#include "wxw.h"

#include "utils.h"

#define TILE_HEIGHT 8
#define TILE_WIDTH 6

#define TILE_IMAGES_N 42

#define TILE_PADDING_SCALE 1.25

class Drawer {
public:
    Drawer();

    void drawTable(wxDC& dc) const;

    void composeBG();
    void composeBoard(const TLVec& table, const Dimensions& gridSize);

    void resizeBg(const wxSize& tableSize);
    bool resizeBoard(const TLVec& table, const Dimensions& gridSize, bool force);

    wxPoint toGrid(const wxPoint& point) const;
    wxPoint fromGrid(int x, int y) const;
    wxPoint fromGrid(const wxPoint& point) const;

    wxSize composeMinSize(const Dimensions& gridSize) const;

    wxSize tableSize;

    wxSize tilePixelSize; // кратно 3x4, по умолчанию 600x800
    wxSize resolution;
    wxRect boardPixelRect;

    ThreePoint marked;

private:
    void drawTile(wxDC& dc, int8_t index, const wxPoint& position,
                  uint8_t zIndex) const;

    wxImage tileImages[TILE_IMAGES_N];

    wxBitmap bgBitmap;
    wxBitmap boardBitmap;

    wxPoint boardPadding;
    wxPoint tilePadding;

    int prevGridPoint;
};

#endif