// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SRC_BRINGUP_BIN_VIRTCON_VC_COLORS_H_
#define SRC_BRINGUP_BIN_VIRTCON_VC_COLORS_H_

#include <string.h>

constexpr uint32_t default_palette[] = {
    // 0-7 Normal/dark versions of colors
    0xff000000,  // black
    0xffaa0000,  // red
    0xff00aa00,  // green
    0xffaa5500,  // brown
    0xff0000aa,  // blue
    0xffaa00aa,  // zircon
    0xff00aaaa,  // cyan
    0xffaaaaaa,  // grey
    // 8-15 Bright/light versions of colors
    0xff555555,  // dark grey
    0xffff5555,  // bright red
    0xff55ff55,  // bright green
    0xffffff55,  // yellow
    0xff5555ff,  // bright blue
    0xffff55ff,  // bright zircon
    0xff55ffff,  // bright cyan
    0xffffffff,  // white
};

typedef struct color_scheme {
  uint8_t front;
  uint8_t back;
} color_scheme_t;

constexpr color_scheme_t color_schemes[] = {
    {
        // Dark (white/black) [Default].
        .front = 0x0F,
        .back = 0x00,
    },
    {
        // Light (black/white).
        .front = 0x00,
        .back = 0x0F,
    },
    {
        // Special (White, Blue).
        .front = 0x0F,
        .back = 0x04,
    },
};

constexpr int kDarkColorScheme = 0;
constexpr int kLightColorScheme = 1;
constexpr int kSpecialColorScheme = 2;

constexpr int kDefaultColorScheme = kDarkColorScheme;

constexpr const color_scheme_t* string_to_color_scheme(const char* string) {
  if (string != NULL) {
    if (strcmp(string, "dark") == 0) {
      return &color_schemes[kDarkColorScheme];
    } else if (strcmp(string, "light") == 0) {
      return &color_schemes[kLightColorScheme];
    } else if (strcmp(string, "special") == 0) {
      return &color_schemes[kSpecialColorScheme];
    }
  }
  return &color_schemes[kDefaultColorScheme];
}

#endif  // SRC_BRINGUP_BIN_VIRTCON_VC_COLORS_H_
