#pragma once

namespace dev
{
namespace con
{

#ifdef _WIN32

#define EthReset ""       // Text Reset

#define EthReset ""       // Text Reset

	// Regular Colors
#define EthBlack	""    // Black
#define EthCoal		""    // Black
#define EthGray		""    // White
#define EthWhite	""    // White
#define EthMaroon	""    // Red
#define EthRed		""    // Red
#define EthGreen	""    // Green
#define EthLime		""    // Green
#define EthOrange	""    // Yellow
#define EthYellow	""    // Yellow
#define EthNavy		""    // Blue
#define EthBlue		""    // Blue
#define EthViolet	""    // Purple
#define EthPurple	""    // Purple
#define EthTeal		""    // Cyan
#define EthCyan		""    // Cyan

#define EthBlackBold	""      // Black
#define EthCoalBold		""      // Black
#define EthGrayBold		""      // White
#define EthWhiteBold	""      // White
#define EthMaroonBold	""      // Red
#define EthRedBold		""      // Red
#define EthGreenBold	""      // Green
#define EthLimeBold		""      // Green
#define EthOrangeBold	""      // Yellow
#define EthYellowBold	""      // Yellow
#define EthNavyBold		""      // Blue
#define EthBlueBold		""      // Blue
#define EthVioletBold	""      // Purple
#define EthPurpleBold	""      // Purple
#define EthTealBold		""      // Cyan
#define EthCyanBold		""      // Cyan

	// Background
#define EthOnBlack		""       // Black
#define EthOnCoal		""		 // Black
#define EthOnGray		""       // White
#define EthOnWhite		""		 // White
#define EthOnMaroon		""       // Red
#define EthOnRed		""       // Red
#define EthOnGreen		""       // Green
#define EthOnLime		""		 // Green
#define EthOnOrange		""       // Yellow
#define EthOnYellow		""		 // Yellow
#define EthOnNavy		""       // Blue
#define EthOnBlue		""		 // Blue
#define EthOnViolet		""       // Purple
#define EthOnPurple		""		 // Purple
#define EthOnTeal		""       // Cyan
#define EthOnCyan		""		 // Cyan

	// Underline
#define EthBlackUnder	""       // Black
#define EthGrayUnder	""       // White
#define EthMaroonUnder	""       // Red
#define EthGreenUnder	""       // Green
#define EthOrangeUnder	""       // Yellow
#define EthNavyUnder	""       // Blue
#define EthVioletUnder	""       // Purple
#define EthTealUnder	""       // Cyan

#else

#define EthReset "\x1b[0m"       // Text Reset

// Regular Colors
#define EthBlack "\x1b[30m"        // Black
#define EthCoal "\x1b[90m"       // Black
#define EthGray "\x1b[37m"        // White
#define EthWhite "\x1b[97m"       // White
#define EthMaroon "\x1b[31m"          // Red
#define EthRed "\x1b[91m"         // Red
#define EthGreen "\x1b[32m"        // Green
#define EthLime "\x1b[92m"       // Green
#define EthOrange "\x1b[33m"       // Yellow
#define EthYellow "\x1b[93m"      // Yellow
#define EthNavy "\x1b[34m"         // Blue
#define EthBlue "\x1b[94m"        // Blue
#define EthViolet "\x1b[35m"       // Purple
#define EthPurple "\x1b[95m"      // Purple
#define EthTeal "\x1b[36m"         // Cyan
#define EthCyan "\x1b[96m"        // Cyan

#define EthBlackBold "\x1b[1;30m"       // Black
#define EthCoalBold "\x1b[1;90m"      // Black
#define EthGrayBold "\x1b[1;37m"       // White
#define EthWhiteBold "\x1b[1;97m"      // White
#define EthMaroonBold "\x1b[1;31m"         // Red
#define EthRedBold "\x1b[1;91m"        // Red
#define EthGreenBold "\x1b[1;32m"       // Green
#define EthLimeBold "\x1b[1;92m"      // Green
#define EthOrangeBold "\x1b[1;33m"      // Yellow
#define EthYellowBold "\x1b[1;93m"     // Yellow
#define EthNavyBold "\x1b[1;34m"        // Blue
#define EthBlueBold "\x1b[1;94m"       // Blue
#define EthVioletBold "\x1b[1;35m"      // Purple
#define EthPurpleBold "\x1b[1;95m"     // Purple
#define EthTealBold "\x1b[1;36m"        // Cyan
#define EthCyanBold "\x1b[1;96m"       // Cyan

// Background
#define EthOnBlack "\x1b[40m"       // Black
#define EthOnCoal "\x1b[100m"   // Black
#define EthOnGray "\x1b[47m"       // White
#define EthOnWhite "\x1b[107m"   // White
#define EthOnMaroon "\x1b[41m"         // Red
#define EthOnRed "\x1b[101m"     // Red
#define EthOnGreen "\x1b[42m"       // Green
#define EthOnLime "\x1b[102m"   // Green
#define EthOnOrange "\x1b[43m"      // Yellow
#define EthOnYellow "\x1b[103m"  // Yellow
#define EthOnNavy "\x1b[44m"        // Blue
#define EthOnBlue "\x1b[104m"    // Blue
#define EthOnViolet "\x1b[45m"      // Purple
#define EthOnPurple "\x1b[105m"  // Purple
#define EthOnTeal "\x1b[46m"        // Cyan
#define EthOnCyan "\x1b[106m"    // Cyan

// Underline
#define EthBlackUnder "\x1b[4;30m"       // Black
#define EthGrayUnder "\x1b[4;37m"       // White
#define EthMaroonUnder "\x1b[4;31m"      // Red
#define EthGreenUnder "\x1b[4;32m"       // Green
#define EthOrangeUnder "\x1b[4;33m"      // Yellow
#define EthNavyUnder "\x1b[4;34m"        // Blue
#define EthVioletUnder "\x1b[4;35m"      // Purple
#define EthTealUnder "\x1b[4;36m"        // Cyan

#endif

}

}