#pragma once

#include "xtr/cclDescriptor.h"

namespace xtr::design {

static constexpr auto clrWhite = RGB(255, 255, 255);
static constexpr auto clrBlack = RGB(0, 0, 0);
static constexpr auto clrGray200 = RGB(200, 200, 200);
static constexpr auto clrGray211 = RGB(211, 211, 211);
static constexpr auto clrGray233 = RGB(233, 233, 233);

static constexpr auto clrRed = RGB(255, 0, 0);
static constexpr auto clrGreen = RGB(0, 255, 0);
static constexpr auto clrBlue = RGB(0, 0, 255);
static constexpr auto clrYellow = RGB(255, 255, 0);

static constexpr auto clrTeal = RGB(0, 200, 200);
static constexpr auto clrJade = RGB(0, 168, 107);
static constexpr auto clrPurple = RGB(178, 102, 255);

[[nodiscard]] CHARFORMAT2W CharFormatRE() noexcept;

[[nodiscard]] COLORREF Color(ccl::rslang::TokenID token) noexcept;
[[nodiscard]] COLORREF Color(ccl::semantic::ParsingStatus status) noexcept;
[[nodiscard]] COLORREF Color(info::CoreStatus status) noexcept;
[[nodiscard]] COLORREF Color(info::ModelStatus status) noexcept;
[[nodiscard]] COLORREF Color(ccl::semantic::EvalStatus status) noexcept;
[[nodiscard]] COLORREF Color(ccl::rslang::ValueClass status) noexcept;
[[nodiscard]] COLORREF Color(ccl::lang::ReferenceType type) noexcept;

[[nodiscard]] COLORREF TextColor(const ccl::semantic::RSForm& schema, EntityUID target);
[[nodiscard]] COLORREF TextColor(const ccl::semantic::RSModel& model, EntityUID target);
[[nodiscard]] COLORREF BackgroundColor(const ccl::semantic::RSForm& schema, EntityUID target);
[[nodiscard]] COLORREF BackgroundColor(const ccl::semantic::RSModel& model, EntityUID target) noexcept;

[[nodiscard]] COLORREF BackgroundColor(const ccl::oss::OSSchema& oss, ccl::oss::PictID target);

[[nodiscard]] COLORREF BracketsColor(int32_t level);

[[nodiscard]] constexpr BOOL IsReference(const COLORREF color) noexcept {
  return color == clrYellow || color == clrGray200;
}

} // namespace xtr::design