#include <string>
#include <string.h>
#include <memory>
#include <cstdlib>

#include "matrix-test.hpp"

using namespace blit;

const uint16_t screen_width = 320;
const uint16_t screen_height = 240;


/* setup */
void init() {
  /*
      screen.alpha = 255;
      screen.mask = nullptr;
      screen.pen = rgba(39, 39, 54);
      screen.clear();*/
}


float angle = 0.0f;

float deg2rad(float a) {
  return a * (M_PI / 180.0f);
}

void draw(std::array<Vec2, 4> vecs, std::vector<Mat3> trs) {
  int s = (150) / trs.size();
  Pen p(255, 255, 255, 32);

  auto o = Vec2(80, 60);

  screen.pen = p;
  screen.line(vecs[0] + o, vecs[1] + o);
  screen.line(vecs[1] + o, vecs[2] + o);
  screen.line(vecs[2] + o, vecs[3] + o);
  screen.line(vecs[3] + o, vecs[0] + o);


  for (auto &tr : trs) {
    p.a += s;

    for (auto &v : vecs) {
      v *= tr;
    }

    auto o = Vec2(80, 60);

    screen.pen = p;
    screen.line(vecs[0] + o, vecs[1] + o);
    screen.line(vecs[1] + o, vecs[2] + o);
    screen.line(vecs[2] + o, vecs[3] + o);
    screen.line(vecs[3] + o, vecs[0] + o);
  }

  // then apply the translations in reverse and ensure we end up back at the start
  for (int i = trs.size() - 1; i >= 0; i--) {
    Mat3 tr = trs[i];

    tr.inverse();
    for (auto &v : vecs) {
      v *= tr;
    }

    screen.pen = Pen(255, 0, 0);
    screen.line(vecs[0] + o, vecs[1] + o);
    screen.line(vecs[1] + o, vecs[2] + o);
    screen.line(vecs[2] + o, vecs[3] + o);
    screen.line(vecs[3] + o, vecs[0] + o);
  }
}

void render(uint32_t time_ms) {
  
  screen.pen = Pen(20, 30, 40);
  screen.clear();

  std::array<Vec2, 4> vecs = {
    Vec2(-10, -10),
    Vec2(10, -10),
    Vec2(10, 10),
    Vec2(-10, 10)
  };

  draw(
    vecs,       
    { Mat3::translation(Vec2(20, 20)),
      Mat3::scale(Vec2(2, 2)),
      Mat3::rotation(angle),
      Mat3::translation(Vec2(10, 10)) 
    }
  );
  /*
  draw(
    vecs,
    mat3::scale(vec2(2, 2)) *
    mat3::translation(vec2(10, 10)) *
    mat3::rotation(angle)
  );*/

  

//    screen.text("angle: " + std::to_string(int(angle)), minimal_font, rect(0, 0, 160, 10));


}

void update(uint32_t time) {
  angle++;
}