# Lauscht auf Port 8080 und spielt bei einem Request zufällig Geistervideos via mplayer auf Bildschirm 2 ab.
# Die letzten beiden gespielten Videos werden ausgeschlossen, um für genug Abwechslung zu sorgen.
# Videos: https://www.youtube.com/watch?v=9d868poEwK4

import os
import random
from http.server import BaseHTTPRequestHandler, HTTPServer
import time
import subprocess

videos = [
"halloween-01-friendly_ghost_1.mp4",
"halloween-02-friendly_ghost_2.mp4",
"halloween-03-friendly_ghost_3.mp4",
"halloween-04-friendly_ghost_4.mp4",
"halloween-06-ghosts_pumpkins.mp4",
"halloween-07-ghosts_candles.mp4",
"halloween-08-marching_band.mp4",
"halloween-05-skeletons.mp4",
"halloween-09-skulls.mp4"]

hostName = "192.168.178.31"
serverPort = 8080


class Player(object):
    _instance = None
    
    # we need a subprocess object for the first poll() so we just let the video run once
    vid_process = subprocess.Popen(["mplayer","/home/tilman/Videos/halloween-04-friendly_ghost_4.mp4"], stdout=subprocess.PIPE)

    def __new__(cls):
        if cls._instance is None:
            print('Creating the object')
            cls._instance = super(Player, cls).__new__(cls)
            # Put any initialization here.
        return cls._instance
    

class MyServer(BaseHTTPRequestHandler):
    player = Player()
    last_no = 0
    last_no2 = 0

    def do_GET(self):
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()
        self.wfile.write(bytes("<html><head><title>Halloween</title></head>", "utf-8"))
        self.wfile.write(bytes("<p>Request: %s</p>" % self.path, "utf-8"))
        self.wfile.write(bytes("<body><p>", "utf-8"))
        
        if (self.player.vid_process.poll() is not None):
            rnd_no = random.randint(0,6)
            while (rnd_no == self.last_no or rnd_no == self.last_no2):
                rnd_no = random.randint(0,6)
            
            self.last_no2 = self.last_no
            self.last_no = rnd_no
            link = videos[rnd_no]
            
            print('START ' + link + '\n')
            self.wfile.write(bytes("START " + videos[rnd_no], "utf-8"))
            
            cmd = "mplayer -xineramascreen 2 -fs  %s"%(link)
            self.player.vid_process = subprocess.Popen(["mplayer",link], stdout=subprocess.PIPE)
        else:
            print('RUNNING\n')
            self.wfile.write(bytes("RUNNING " + videos[self.last_no], "utf-8"))
        
        self.wfile.write(bytes("</p>", "utf-8"))
        self.wfile.write(bytes("</body></html>", "utf-8"))



if __name__ == "__main__":        
    webServer = HTTPServer((hostName, serverPort), MyServer)
    print("Server started http://%s:%s" % (hostName, serverPort))

    try:
        webServer.serve_forever()
    except KeyboardInterrupt:
        pass

    webServer.server_close()
    print("Server stopped.")
