#pragma once

#include <QString>
#include <QColor>

namespace jlib {
namespace qt {

namespace def_sizes {

static const int window_width = 646;
static const int window_height = 424;

static const int title_height = 54;

static const int content_height = window_height - title_height;
static const int control_height = 24;

static const int big_window_width = 1022;
static const int big_window_height = 670;
static const int big_content_height = big_window_height - title_height;

static const int device_view_width = 306;
static const int device_view_height = 236;

} // namespace def_sizes


namespace def_colors {

// 0x202224
static const auto window_bk = QColor(0x202224);
// 0x2c2d30
static const auto control_bk = QColor(0x2c2d30);
// 0x26272a
static const auto control_bk2 = QColor(0x26272a);
// 0x313235
static const auto control_bk_suspend = QColor(0x313235);
// 0x424446
static const auto control_bk_unknown = QColor(0x424446);
// 0xd7d5d5
static const auto unknown_trans = QColor(0xd7d5d5);
// 0xfd8b30
static const auto control_text_font = QColor(0xfd8b30);

// 0xb0afaf
static const auto icon_text_color = QColor(0xb0afaf);

// 0xfe3e3e
static const auto hint_color = QColor(0xfe3e3e);
// 0xa8a9a9
static const auto edit_color = QColor(0xa8a9a9);

// 0x626466
static const auto bg_normal = QColor(0x626466);
// 0x727476
static const auto bg_suspend = QColor(0x727476);
// 0xbbbbbb
static const auto font_normal = QColor(0xbbbbbb);
// 0xf1f1f1
static const auto font_suspend = QColor(0xf1f1f1);
// 0x838383
static const auto font_normal2 = QColor(0x838383);
// 0xaaaaaa
static const auto font_normal3 = QColor(0xaaaaaa);
// 0x929292
static const auto font_normal4 = QColor(0x929292);

// 0x1a1a1a
static const auto ptz_border = QColor(0x1a1a1a);
// 0x2d2e31
static const auto ptz_back = QColor(0x2d2e31);

} // namespace def_colors


namespace def_font_families {

static const char* const yahei = "Microsoft YaHei";

} // namespace def_font_families


inline QString color_value_to_string(int value) {
	auto s = QString::number(value, 16);
	if (s.length() == 1) { s += "0"; }
	return s;
}

inline QString color_to_string_16(QColor color) {
	return color_value_to_string(color.red()) + color_value_to_string(color.green()) + color_value_to_string(color.blue());
}

// background:[style];
inline QString build_bg_style(QString style = "transparent") {
	return QString("background:") + style + QString(";");
}

// color:#[color];
inline QString build_color_style(QColor color) {
	return QString("color:#") + color_to_string_16(color) + QString(";");
}

// background-color:#[color];
inline QString build_bgcolor_style(QColor bgcolor) {
	return QString("background-color:#") + color_to_string_16(bgcolor) + QString(";");
}

// background-color:rgba([r],[g],[b],[a]%);
inline QString build_bgcolor_style(int r, int g, int b, int a) {
	return QString("background-color:rgba(%1,%2,%3,%4%);").arg(r).arg(g).arg(b).arg(a);
}

// border:[border]px;
inline QString build_border_style(size_t border) {
	return QString("border:") + QString::number(border) + QString("px;");
}

// font:[font_size]pt;font-family:[font_family];
inline QString bulid_font_style(size_t font_size, QString font_family = def_font_families::yahei) {
	return QString("font:") + QString::number(font_size) + QString("pt;")
		+ QString("font-family:") + font_family + QString(";");
}

// color:#[color];font:[font_size]pt;font-family:[font_family];
inline QString build_style(QColor color, size_t font_size, QString font_family = def_font_families::yahei) {
	return build_color_style(color)	+ bulid_font_style(font_size, font_family);
}

// background-color:#[color];color:#[color];font:[font_size]pt;font-family:[font_family];[border:[border]px;]
inline QString build_style(QColor bgcolor, QColor color, size_t font_size, 
						   QString font_family = def_font_families::yahei, 
						   bool with_border = false, size_t border = 0) {
	auto style = build_bgcolor_style(bgcolor) + build_style(color, font_size, font_family);
	if (with_border) { style += build_border_style(border); }
	return style;
}

// background-color:rgba([r],[g],[b],[a]%);color:#[color];font:[font_size]pt;font-family:[font_family];
inline QString build_style(int r, int g, int b, int a, QColor color, size_t font_size,
						   QString font_family = def_font_families::yahei) {
	return build_bgcolor_style(r, g, b, a) + build_style(color, font_size, font_family);
}


namespace def_style_sheets {

// color:#ffffff;font:11pt;font-family:Microsoft YaHei;
inline QString label() {
	return build_style(Qt::white, 11);
}

// color:#fe3e3e;font:9pt;font-family:Microsoft YaHei;
inline QString hint() {
	return build_style(def_colors::hint_color, 9);
}

// color:#202224;font:12pt;font-family:Microsoft YaHei;border:0px;
inline QString edit() {
	return build_style(def_colors::window_bk, def_colors::edit_color, 12, def_font_families::yahei, true);
}

// color:#424446;font:11pt;font-family:Microsoft YaHei;border:0px;
inline QString unknown() {
	return build_style(def_colors::control_bk_unknown, def_colors::edit_color, 11, def_font_families::yahei, true);
}

// background:transparent;color:#d7d5d5;font:18pt;font-family:Microsoft YaHei;
inline QString unkonwn_trans() {
	return build_bg_style() + build_style(def_colors::unknown_trans, 18);
}

static const auto vertical_scroll_bar = R"(
QScrollBar:vertical
{
	width:8px;
	background:rgba(0,0,0,0%);
	margin:0px,0px,0px,0px;
	padding-top:0px;
	padding-bottom:0px;
}

QScrollBar::handle:vertical
{
	width:8px;
	background:#444547;
	border-radius:4px;
	min-height:20;
}

QScrollBar::handle:vertical:hover
{
	width:8px;
	background:#444547;
	border-radius:4px;
	min-height:20;
}

QScrollBar::add-line:vertical
{
	height:9px;
	width:8px;
	border-image:url(:/images/a/3.png);
	subcontrol-position:bottom;
}

QScrollBar::sub-line:vertical
{
	height:9px;
	width:8px;
	border-image:url(:/images/a/1.png);
	subcontrol-position:top;
}

QScrollBar::add-line:vertical:hover
{
	height:9px;
	width:8px;
	border-image:url(:/images/a/4.png);
	subcontrol-position:bottom;
}

QScrollBar::sub-line:vertical:hover
{
	height:9px;
	width:8px;
	border-image:url(:/images/2.png);
	subcontrol-positino:top;
}

QScrollBar::add-page:vertical,QScrollBar::sub-page:vertical
{
	background:rgba(0,0,0,10%);
	border-radius:4px;
}

)";

static const auto search_bar_edit = R"(
border: 0px;
background: transparent;
selection-background-color: white;
color: #a8a9a9;
font-family: Microsoft Yahei;
font-size: 14px;
)";

static const auto progress_bar = R"(
QProgressBar{
	background-color:#dedede;border-radius:3px;
}
QProgressBar::chunk{
	background-color:#fd8b30;border-radius:3px;
}
)";

static const auto slider = R"(
QSlider::groove:horizontal
{
	border:0px;
	height:4px;
	background:rgb(0,0,0);
}
QSlider::sub-page:horizontal
{
	background:#fd8b30;
}
QSlider::add-page:horizontal
{
	background:#141414;
}
QSlider::handle:horizontal
{
	background:white;
	width:10px;
	border-radius:5px;
	margin:-3px 0px -3px 0px;
}
)";

static const auto menu = R"(
QMenu::item 
{
	font-family: Microsoft Yahei; 
	font-size: 12pt; 
	color: #808080; 
	border: 1px solid gray; 
	background-color: rgb(234,234,234);
}
QMenu::item:hover 
{
	background-color: rgb(0, 0, 255);
}
)";

static const auto group_box = R"(
QGroupBox {
    border: 1px solid gray;
    border-radius: 9px;
    margin-top: 0.5em;
	font: 24pt;
	font-family: Microsoft Yahei;
}
QGroupBox::title {
    subcontrol-origin: margin;
    left: 20px;
    padding: 0 3px 0 3px;
	color: white;
}
)";

static const auto listWidgetStyleSheet = R"(
QListWidget 
{ 
	font:12pt; 
	font-family:Microsoft Yahei; 
	background-color: #2c2d30; 
	border: 1px solid black; 
} 

QListWidget::item 
{ 
	color:#fd8b30; 
	border: 1px solid silver;
} 

QListWidget::item::selected 
{ 
	color:#fd8b30; 
	border: 3px solid yellow;
}
)";


static const auto check_box = R"(
QCheckBox
{
	font-size: 16px;
	color: white;
}
QCheckBox::indicator
{
	width: 48px;
	height: 48px;
}
QCheckBox::indicator:checked
{
	image: url(:/Skin/checkbox/checkbox_checked.png);
}
QCheckBox::indicator:unchecked
{
	image: url(:/Skin/checkbox/checkbox_unchecked.png);
}
)";

} // end of namespace def_style_sheets


} // end of namespace qt
} // end of namespace jlib