"""
This file contains most (all?) permutations of single and dual colors
which a user can try to use as an argument to face_color and edge_color
in the relevant layers. The idea is to parameterize the tests over these
options.

Vispy has a few bugs/limitations that we're trying to overcome. First, it
doesn't parse lists like [Color('red'), Color('red')]. Second, the color of
'g' and 'green' is different. We're consistent with vispy's behavior ATM,
but it might change in a future release.
"""

import numpy as np
from vispy.color import Color, ColorArray

# Apparently there are two types of greens - 'g' is represented by a
# (0, 1, 0) tuple, while 'green' has an approximate value of
# (0, 0.5, 0). This is why these two colors are treated differently
# below.
REDA = (1.0, 0.0, 0.0, 1.0)
RED = (1.0, 0.0, 0.0)
REDF = "#ff0000"
GREENV = Color("green").rgb[1]
GREENA = (0.0, GREENV, 0.0, 1.0)
GREEN = (0.0, GREENV, 0.0)
GREENF = Color("green").hex
REDARR = np.array([[1.0, 0.0, 0.0, 1.0]], dtype=np.float32)
GREENARR = np.array([[0.0, GREENV, 0.0, 1.0]], dtype=np.float32)

single_color_options = [
    RED,
    GREENA,
    "transparent",
    "red",
    "g",
    GREENF,
    "#ffccaa44",
    REDA,
    REDARR[0, :3],
    Color(RED).rgb,
    Color(GREENF).rgba,
    ColorArray("red").rgb,
    ColorArray(GREENA).rgba,
    ColorArray(GREEN).rgb,
    ColorArray([GREENA]).rgba,
    GREENARR,
    REDF,
    np.array([GREEN]),
    np.array([GREENF]),
    None,
]

single_colors_as_array = [
    ColorArray(RED).rgba,
    ColorArray(GREEN).rgba,
    ColorArray((0.0, 0.0, 0.0, 0.0)).rgba,
    ColorArray(RED).rgba,
    ColorArray("#00ff00").rgba,
    ColorArray(GREEN).rgba,
    ColorArray("#ffccaa44").rgba,
    ColorArray(RED).rgba,
    ColorArray(RED).rgba,
    ColorArray(RED).rgba,
    ColorArray(GREEN).rgba,
    ColorArray(RED).rgba,
    ColorArray(GREEN).rgba,
    ColorArray(GREEN).rgba,
    ColorArray(GREEN).rgba,
    ColorArray(GREEN).rgba,
    ColorArray(RED).rgba,
    ColorArray(GREEN).rgba,
    ColorArray(GREEN).rgba,
    np.zeros((1, 4), dtype=np.float32),
]

two_color_options = [
    ["red", "red"],
    ("green", "red"),
    ["green", "#ff0000"],
    ["green", "g"],
    ("r" for r in range(2)),
    ["r", "r"],
    np.array(["r", "r"]),
    np.array([[1, 1, 1, 1], [0, GREENV, 0, 1]]),
    (None, "green"),
    [GREENARR[0, :3], REDARR[0, :3]],
]
# Some of the options below are commented out. When the bugs with
# vispy described above are resolved, we can uncomment the lines
# below as well.
two_colors_simple = [
    ["red", "red"],
    ["green", "red"],
    ["green", "red"],
    ["green", "g"],
    ["red", "red"],
    ["red", "red"],
    ["red", "red"],
    ["white", "green"],
    (None, "green"),
    ["green", "red"],
]

two_colors_as_array = [ColorArray(color).rgba for color in two_colors_simple]

invalid_colors = [
    "rr",
    "gf",
    "#gf9gfg",
    "#ff00000",
    "#ff0000ii",
    (-1, 0.0, 0.0, 0.0),
    ("a", 1, 1, 1),
    4,
    (3,),
    (34, 342, 2334, 4343, 32, 0.1, -1),
    np.array([[1, 1, 1, 1, 1]]),
    np.array([[[0, 1, 1, 1]]]),
    ColorArray(["r", "r"]),
    Color("red"),
    (REDARR, GREENARR),
]

warning_colors = [
    np.array([]),
    np.array(["g", "g"], dtype=object),
    [],
    [[1, 2], [3, 4], [5, 6]],
    np.array([[10], [10], [10], [10]]),
]
