#include <vector>
#include <iostream>
#include <fstream>

class MapFile {
public:
  void load(std::ifstream& file)
  {
    file.read(reinterpret_cast<char*>(&netp_id_header), sizeof(netp_id_header));
    file.read(reinterpret_cast<char*>(&id), sizeof(short));
    file.read(reinterpret_cast<char*>(&name), sizeof(name));
    file.read(reinterpret_cast<char*>(&description), sizeof(description));
    file.read(reinterpret_cast<char*>(&x_size), sizeof(short));
    file.read(reinterpret_cast<char*>(&y_size), sizeof(short));
    file.read(reinterpret_cast<char*>(&tile_set), sizeof(tile_set));
    file.read(reinterpret_cast<char*>(&thumbnail_x_pix), sizeof(short));
    file.read(reinterpret_cast<char*>(&thumbnail_y_pix), sizeof(short));

    data.resize(x_size * y_size);
    file.read(reinterpret_cast<char*>(&(*data.begin())), sizeof(unsigned short)*data.size());
  }


  void print()
  {
    /*
      std::cout << netp_id_header << std::endl;
      std::cout << id << std::endl;
      std::cout << name << std::endl;
      std::cout << description << std::endl;
      std::cout << x_size << std::endl;
      std::cout << y_size << std::endl;
      //std::cout << tile_set << std::endl;
      std::cout << thumbnail_x_pix << std::endl;
      std::cout << thumbnail_y_pix << std::endl;
    */
    std::cout << "(windstille-level\n"
      "  (properties\n"
      "    (width  " << x_size << ")\n"
      "    (height " << y_size << "))\n"
      "  (tilemap (data\n";
      
    for(int y = 0; y < y_size; ++y)
      {
        for(int x = 0; x < x_size; ++x)
          {
            std::cout << data[x + y * x_size] << " ";
          }
        std::cout <<  std::endl;
      }

    std::cout << ")))\n";
  }

  unsigned char   netp_id_header[64];
  unsigned short  id;
  unsigned char   name[256];
  unsigned char   description[1024];
  unsigned short  x_size;
  unsigned short  y_size;
  char            tile_set[256];
 
  unsigned short  thumbnail_x_pix;
  unsigned short  thumbnail_y_pix;
  
  std::vector<unsigned short> data;
};

int main(int argc, char** argv)
{
  for(int i = 1; i < argc; ++i)
    {
      std::ifstream stream(argv[i]);

      MapFile foo;
      foo.load(stream);
      foo.print();
      std::cout << std::endl;
    }
}

// EOF //


