/*
* Arduino JSON library
* Benoit Blanchon 2014 - MIT License
*/

#pragma once

#include "../Arduino/Print.hpp"

namespace ArduinoJson
{
    namespace Internals
    {
        // Decorator on top of Print to allow indented output.
        // This class is used by JsonPrintable::prettyPrintTo() but can also be used
        // for your own purpose, like logging.
        class IndentedPrint : public Print
        {
        public:

            IndentedPrint(Print& p)
                : sink(&p)
            {
                level = 0;
                tabSize = 2;
                isNewLine = true;
            }

            virtual size_t write(uint8_t);

            // Adds one level of indentation
            void indent();

            // Removes one level of indentation
            void unindent();

            // Set the number of space printed for each level of indentation
            void setTabSize(uint8_t n);

        private:
            Print* sink;
            uint8_t level : 4;
            uint8_t tabSize : 3;
            bool isNewLine : 1;
            
            size_t writeTabs();

            static const int MAX_LEVEL = 15; // because it's only 4 bits
            static const int MAX_TAB_SIZE = 7; // because it's only 3 bits
        };
    }
}

