#ifndef PASTELSYS_MEASURETABLE_PRINT_LATEX_HPP
#define PASTELSYS_MEASURETABLE_PRINT_LATEX_HPP
#include "pastel/sys/measuretable_print_latex.h"
#include "pastel/sys/string.h"
#include <vector>
namespace Pastel
{
    inline void printLatex(
        const MeasureTable& measureTable,
        std::ostream& stream)
    {
        integer columns = measureTable.width();
        integer rows = measureTable.height();
        if (columns == 0 || rows == 0)
        {
            return;
        }
        stream << "\\begin{table}" << std::endl;
        stream << "\\small" << std::endl;
        stream << "\\center" << std::endl;
        stream << "\\begin{tabular}{";
        for (integer x = 0;x < columns;++x)
        {
            if (measureTable.hasVerticalSeparator(x))
            {
                stream << "|";
            }
            switch(measureTable(x, 0).alignment())
            {
            case MeasureTable::Alignment::Left:
                stream << "l";
                break;
            case MeasureTable::Alignment::Right:
                stream << "r";
                break;
            case MeasureTable::Alignment::Center:
                stream << "c";
                break;
            };
        }
        if (measureTable.hasVerticalSeparator(columns))
        {
            stream << "|";
        }
        stream << "}" << std::endl;
        for (integer y = 0;y < rows;++y)
        {
            if (measureTable.hasHorizontalSeparator(y))
            {
                stream << "\\hline";
                stream << std::endl;
            }
            for (integer x = 0;x < columns;++x)
            {
                stream << measureTable(x, y).text();
                if (x < columns - 1)
                {
                    stream << " & ";
                }
            }
            stream << " \\\\";
            stream << std::endl;
        }
        if (measureTable.hasHorizontalSeparator(rows))
        {
            stream << "\\hline";
            stream << std::endl;
        }
        stream << "\\end{tabular}" << std::endl;
        if (!measureTable.caption().empty())
        {
            stream << "\\caption{" << measureTable.caption() 
                << "}" << std::endl;
        }
        stream << "\\end{table}" << std::endl;
    }
}
#endif