#pragma once

#include <iostream>
#include <vector>

#include "svg.h"

using namespace std;


void svg_begin(double width, double height) {
    cout << "<?xml version='1.0' encoding='UTF-8'?>\n";
    cout << "<svg ";
    cout << "width='" << width << "' ";
    cout << "height='" << height << "' ";
    cout << "viewBox='0 0 " << width << " " << height << "' ";
    cout << "xmlns='http://www.w3.org/2000/svg'>\n";
}

void svg_end() {
    cout << "</svg>\n";
}

void svg_text(double left, double baseline, string text) {
            cout << "<text x='" << left << "' y=' "<< baseline <<" '> "<< text <<" </text>";
}

void svg_rect(double x, double y, double width, double height, string stroke, string fill){
     cout << "<rect x=' " << x << "' y=' "<< y <<" ' width=' " << width <<" ' height=' " << height <<
      " ' stroke=' " << stroke << "' fill=' " << fill << " '/>";
}

void show_histogram_svg( vector<size_t>& bins) {

    string colours[bins.size()];
    cerr << "Enter colours: " << endl;
    for (size_t i = 0; i < bins.size(); i++) {
        cerr << "Enter [" << i << "]: "; cin >> colours[i];
    }


    const auto IMAGE_WIDTH = 400;
    const auto IMAGE_HEIGHT = 300;
    const auto TEXT_LEFT = 20;
    const auto TEXT_BASELINE = 20;
    const auto TEXT_WIDTH = 50;
    const auto BIN_HEIGHT = 30;
    const auto BLOCK_WIDTH = 10;
    svg_begin(IMAGE_WIDTH, IMAGE_HEIGHT);
    double top = 0;
    const size_t MAX_ASTERISK = IMAGE_WIDTH - TEXT_WIDTH;
    int maxb = bins[0];
    for (size_t j = 0; j < bins.size(); j++){
        if (bins[j] > maxb) maxb = bins[j];
    }
    cout <<"                         " << maxb<< "            ";

    for (size_t i = 0; i < bins.size(); i++) {
            double bin_width;
            if (maxb == bins[i] ){
            bin_width = MAX_ASTERISK ;
            }
            else {
               bin_width = MAX_ASTERISK * bins[i] / maxb;
            }
               svg_text(TEXT_LEFT, top + TEXT_BASELINE, to_string(bins[i]));
               svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT , "#aaffaa",  colours [i]);
               top += BIN_HEIGHT;
    }
    svg_end();
}