
# test code for green pulse

#!/usr/bin/env python
from samplebase import SampleBase
# from rgbmatrix import graphics, RGBMatrix, RGBMatrixOptions
from rgbmatrix import graphics, RGBMatrixOptions
import time
import random


class PulsingColors(SampleBase):
    def __init__(self, *args, **kwargs):
        super(PulsingColors, self).__init__(*args, **kwargs)

        # options = RGBMatrixOptions(PulsingColors())

        # if self.args.led_gpio_mapping != None:
        # options.hardware_mapping = self.args.led_gpio_mapping
        # options.rows = self.args.led_rows
        # options.cols = self.args.led_cols
        # options.chain_length = self.args.led_chain

        # self.offscreen_canvas = self.matrix.CreateFrameCanvas()
        offscreen_canvas = self.matrix.CreateFrameCanvas()
        count = 0
        direction = 1

        NumPanelRows = pulsing_colors.options.rows
        print(" read in NumPanelRows ",  NumPanelRows)
        NumPanelCol = 4
        NumLinestoDisplay = 8  # one less than teh actual number becaues we start at zero
        DisplayPanelLines = offscreen_canvas.width / NumPanelCol
        DisplayPanelRows = offscreen_canvas.height / NumPanelRows
        print("Ready player one?")
        print("")

        print(DisplayPanelLines, "width per panel")
        print(DisplayPanelRows, "height per panel")

        print("")
        print(NumPanelRows*NumPanelCol, "total number of panels")
        print("")

        print(offscreen_canvas.width, "offscreen.canvas.width")
        print(offscreen_canvas.height, "offscreen.canvas.height")

        self._font_large = graphics.Font()
        self._font_large.LoadFont("/home/pi/rpi-rgb-led-matrix/fonts/10x20.bdf")
        #  self._font_large.LoadFont("home/pi/rpi-rgb-led-matrix/fonts/9x18.bdf")
        #  self._font_large.LoadFont("home/pi/rpi-rgb-led-matrix/fonts/9x18B.bdf")
        #  self._font_large.LoadFont("home/pi/rpi-rgb-led-matrix/fonts/9x15.bdf")
        #  self._font_large.LoadFont("home/pi/rpi-rgb-led-matrix/fonts/9x15B.bdf")
        #  self._font_large.LoadFont("home/pi/rpi-rgb-led-matrix/fonts/clR6x12.bdf")
        #  self._font_large.LoadFont("home/pi/rpi-rgb-led-matrix/fonts/helvR12.bdf")

        self._font_small = graphics.Font()
        #  self._font_small.LoadFont("home/pi/rpi-rgb-led-matrix/fonts/5x8.bdf")
        #  self._font_small.LoadFont("home/pi/rpi-rgb-led-matrix/fonts/6x9.bdf")
        self._font_small.LoadFont("/home/pi/rpi-rgb-led-matrix/fonts/6x10.bdf")
        #  self._font_small.LoadFont("/home/pi/rpi-rgb-led-matrix/fonts/6x12.bdf")
        #  self._font_small.LoadFont("/home/pi/rpi-rgb-led-matrix/fonts/6x13.bdf")
        #  self._font_small.LoadFont("/home/pi/rpi-rgb-led-matrix/fonts/6x13B.bdf")
        #  self._font_small.LoadFont("/home/pi/rpi-rgb-led-matrix/fonts/6x13O.bdf")
        #  self._font_small.LoadFont("/home/pi/rpi-rgb-led-matrix/fonts/7x13.bdf")
        #  self._font_small.LoadFont("/home/pi/rpi-rgb-led-matrix/fonts/7x13B.bdf")
        #  self._font_small.LoadFont("/home/pi/rpi-rgb-led-matrix/fonts/7x13O.bdf")
        #  self._font_small.LoadFont("/home/pi/rpi-rgb-led-matrix/fonts/7x14.bdf")
        #  self._font_small.LoadFont("/home/pi/rpi-rgb-led-matrix/fonts/7x14B.bdf")
        #  self._font_small.LoadFont("/home/pi/rpi-rgb-led-matrix/fonts/8x13.bdf")
        #  self._font_small.LoadFont("/home/pi/rpi-rgb-led-matrix/fonts/8x13B.bdf")
        #  self._font_small.LoadFont("/home/pi/rpi-rgb-led-matrix/fonts/8x13O.bdf")
        #  self._font_small.LoadFont("/home/pi/rpi-rgb-led-matrix/fonts/helvR12.bdf")

        self._font_tiny = graphics.Font()
        #  self._font_tiny.LoadFont("/home/pi/rpi-rgb-led-matrix/fonts/4x6.bdf")
        #  self._font_tiny.LoadFont("/home/pi/rpi-rgb-led-matrix/fonts/5x7.bdf")
        #  self._font_tiny.LoadFont("/home/pi/rpi-rgb-led-matrix/fonts/5x8.bdf")
        self._font_tiny.LoadFont("/home/pi/rpi-rgb-led-matrix/fonts/tom-thumb.bdf")

        # Define colors
        self._white = graphics.Color(255, 255, 255)
        self._red = graphics.Color(255, 0, 0)
        self._blue = graphics.Color(64, 64, 255)
        self._yellow = graphics.Color(255, 255, 0)
        self._green = graphics.Color(0, 255, 0)
        self._cyan = graphics.Color(0, 255, 255)
        self._magenta = graphics.Color(255, 0, 255)
        self._gray = graphics.Color(128, 128, 128)
        self._silver = graphics.Color(192, 192, 192)
        self._maroon = graphics.Color(128, 0, 0)
        self._olive = graphics.Color(128, 128, 0)
        self._lime = graphics.Color(0, 128, 0)
        self._purple = graphics.Color(128, 0, 128)
        self._teal = graphics.Color(0, 128, 128)
        self._navy = graphics.Color(0, 0, 128)
        self._ltgray = graphics.Color(211, 211, 211)
        self._dimgray = graphics.Color(105, 105, 105)
        self._gainsboro = graphics.Color(220, 220, 220)
        self._whitesmoke = graphics.Color(245, 245, 245)
        self._blank = graphics.Color(0, 0, 0)

        self._darkred = graphics.Color(139, 0, 0)
        self._brown = graphics.Color(165, 42, 42)
        self._firebrick = graphics.Color(78, 34, 34)
        self._crimson = graphics.Color(220, 20, 60)
        self._tomato = graphics.Color(255, 99, 71)
        self._coral = graphics.Color(255, 127, 80)
        self._indianred = graphics.Color(205, 92, 92)
        self._lightcoral = graphics.Color(40, 128, 128)
        self._darksalmon = graphics.Color(233, 150, 122)
        self._salmon = graphics.Color(250, 128, 114)
        self._lightsalmon = graphics.Color(255, 160, 122)
        self._orangered = graphics.Color(255, 69, 0)
        self._darkorange = graphics.Color(255, 140, 0)
        self._orange = graphics.Color(255, 165, 0)
        self._gold = graphics.Color(255, 215, 0)
        self._darkgoldenrod = graphics.Color(184, 134, 11)
        self._goldenrod = graphics.Color(218, 165, 32)
        self._palegoldenrod = graphics.Color(238, 232, 170)
        self._darkkhaki = graphics.Color(189, 183, 107)
        self._khaki = graphics.Color(240, 230, 140)
        self._yellowgreen = graphics.Color(154, 205, 50)
        self._darkolivegreen = graphics.Color(85, 107, 47)
        self._olivedrab = graphics.Color(107, 142, 35)
        self._lawngreen = graphics.Color(124, 252, 0)
        self._chartreuse = graphics.Color(127, 255, 0)
        self._greenyellow = graphics.Color(173, 255, 47)
        self._darkgreen = graphics.Color(0, 100, 0)
        self._forestgreen = graphics.Color(34, 139, 34)
        self._limegreen = graphics.Color(50, 205, 50)
        self._lightgreen = graphics.Color(144, 238, 144)
        self._palegreen = graphics.Color(52, 251, 152)
        self._darkseagreen = graphics.Color(143, 188, 143)
        self._mediumspringgreen = graphics.Color(0, 250, 154)
        self._springgreen = graphics.Color(0, 255, 127)
        self._seagreen = graphics.Color(46, 139, 87)
        self._mediumaquamarine = graphics.Color(102, 205, 170)
        self._mediumseagreen = graphics.Color(60, 179, 113)
        self._lightseagreen = graphics.Color(32, 178, 170)
        self._darkslategray = graphics.Color(47, 79, 79)
        self._darkcyan = graphics.Color(0, 139, 139)
        self._aqua = graphics.Color(0, 255, 255)
        self._lightcyan = graphics.Color(224, 255, 255)
        self._darkturquoise = graphics.Color(0, 206, 209)
        self._turquoise = graphics.Color(64, 224, 208)
        self._mediumturquoise = graphics.Color(72, 209, 204)
        self._paleturquoise = graphics.Color(75, 238, 238)
        self._aquamarine = graphics.Color(127, 255, 212)
        self._powderblue = graphics.Color(176, 224, 230)
        self._cadetblue = graphics.Color(95, 158, 160)
        self._steelblue = graphics.Color(70, 130, 180)
        self._cornflowerblue = graphics.Color(100, 149, 237)
        self._deepskyblue = graphics.Color(0, 191, 255)
        self._dodgerblue = graphics.Color(30, 144, 255)
        self._lightblue = graphics.Color(173, 216, 230)
        self._skyblue = graphics.Color(135, 206, 235)
        self._lightskyblue = graphics.Color(135, 206, 250)
        self._midnightblue = graphics.Color(25, 25, 112)
        self._darkblue = graphics.Color(0, 0, 139)
        self._mediumblue = graphics.Color(0, 0, 205)
        self._royalblue = graphics.Color(65, 105, 225)
        self._blueviolet = graphics.Color(138, 43, 226)
        self._indigo = graphics.Color(75, 0, 130)
        self._darkslateblue = graphics.Color(72, 61, 139)
        self._slateblue = graphics.Color(106, 90, 205)
        self._mediumslateblue = graphics.Color(123, 104, 238)
        self._mediumpurple = graphics.Color(147, 112, 219)
        self._darkmagenta = graphics.Color(139, 0, 139)
        self._darkviolet = graphics.Color(148, 0, 211)
        self._darkorchid = graphics.Color(153, 50, 204)
        self._mediumorchid = graphics.Color(186, 85, 211)
        self._thistle = graphics.Color(216, 191, 216)
        self._plum = graphics.Color(221, 160, 221)
        self._violet = graphics.Color(238, 130, 238)
        self._orchid = graphics.Color(218, 112, 214)
        self._mediumvioletred = graphics.Color(199, 21, 133)
        self._palevioletred = graphics.Color(219, 112, 147)
        self._deeppink = graphics.Color(55, 20, 147)
        self._hotpink = graphics.Color(255, 105, 180)
        self._lightpink = graphics.Color(255, 182, 193)
        self._pink = graphics.Color(255, 192, 203)
        self._antiquewhite = graphics.Color(250, 235, 215)
        self._beige = graphics.Color(245, 245, 220)
        self._bisque = graphics.Color(255, 228, 196)
        self._blanchedalmond = graphics.Color(255, 235, 205)
        self._wheat = graphics.Color(245, 222, 179)
        self._cornsilk = graphics.Color(255, 248, 220)
        self._lemonchiffon = graphics.Color(255, 250, 205)
        self._lightgoldenrodyellow = graphics.Color(250, 250, 210)
        self._lightyellow = graphics.Color(255, 255, 224)
        self._saddlebrown = graphics.Color(139, 69, 19)
        self._sienna = graphics.Color(160, 82, 45)
        self._chocolate = graphics.Color(210, 105, 30)
        self._peru = graphics.Color(205, 133, 63)
        self._sandybrown = graphics.Color(244, 164, 96)
        self._burlywood = graphics.Color(222, 184, 135)
        self._tan = graphics.Color(210, 180, 140)
        self._rosybrown = graphics.Color(188, 143, 143)
        self._moccasin = graphics.Color(255, 228, 181)
        self._navajowhite = graphics.Color(255, 222, 173)
        self._peachpuff = graphics.Color(255, 218, 185)
        self._mistyrose = graphics.Color(255, 228, 225)
        self._lavenderblush = graphics.Color(255, 240, 245)
        self._linen = graphics.Color(250, 240, 230)
        self._oldlace = graphics.Color(253, 245, 230)
        self._papayawhip = graphics.Color(255, 239, 213)
        self._seashell = graphics.Color(255, 245, 238)
        self._mintcream = graphics.Color(245, 255, 250)
        self._slategray = graphics.Color(112, 128, 144)
        self._lightslategray = graphics.Color(119, 136, 153)
        self._lightsteelblue = graphics.Color(176, 196, 222)
        self._lavender = graphics.Color(230, 230, 250)
        self._floralwhite = graphics.Color(255, 250, 240)
        self._aliceblue = graphics.Color(240, 248, 255)
        self._ghostwhite = graphics.Color(248, 248, 255)
        self._honeydew = graphics.Color(240, 255, 240)
        self._ivory = graphics.Color(255, 255, 240)
        self._azure = graphics.Color(240, 255, 255)
        self._snow = graphics.Color(255, 250, 250)

# options.brightness = self.args.led_brightness

        pos = offscreen_canvas.width
        print("")
        print("offscreen_canvas.width", pos)
        print("color set to ", )

        while True:
            #  self.usleep(5 * 100)

            # red = 0
            # green = 155
            # blue = 0

            red = 0
            green = random.randrange(175, 240, 1)
            blue = 0

            self.args.led_brightness = count
            count = count + direction
            if (count >= 255):
                direction = -1
                print("ping")
                print("     Red: ", red, " Green: ", green, " Blue: ", blue)
                time.sleep(.0025)
            if (count <= 2):
                direction = 1
                print("pong")
                print("     Red: ", red, " Green: ", green, " Blue: ", blue)
                time.sleep(.0025)

            time.sleep(0.0125)
            # print(count)
            # print("")

            offscreen_canvas.Fill(red, count, blue)
            # offscreen_canvas.Fill(self._oldlace)
            offscreen_canvas = self.matrix.SwapOnVSync(offscreen_canvas)


# Main function
if __name__ == "__main__":
    pulsing_colors = PulsingColors()
    if (not pulsing_colors.process()):
        pulsing_colors.print_help()
