# importing vlc module
from os import listdir
from os.path import isfile, join
from random import randint
from time import sleep
import paho.mqtt.client as mqtt
from video import Video
import sys
from random import randint
import cv2
from image import Image
import multiprocessing

class App:
    def __init__(self, client, x, y):
        self.x = x
        self.y = y

        
        self.client = client
        self.video = Video(x, y)
        self.image = Image(x, y)
        self.videos = [join("slave/videos", f) for f in listdir("slave/videos") if isfile(join("slave/videos", f))]
        self.images = [join("slave/images", f) for f in listdir("slave/images") if isfile(join("slave/images", f))]
        self.lastvideo = -1
        self.lastimage = -1
        print(self.videos)
        print(self.videos[randint(0, len(self.videos)-1)])
        
    def on_connect(self, client, userdata, flags, rc):
        print("Connected with result code "+str(rc))
        self.client.subscribe("slave")


    def on_message(self, client, userdata, msg):
        print(msg.topic+" "+str(msg.payload))
        if msg.payload == b'idle':
            print("Idle")
            self.x = multiprocessing.Process(target = self.idle)
            self.x.start()
            
        elif msg.payload == b'stop':
            print("Stop")
            try:
                self.x.terminate()
            except:
                pass

    def idle(self):
        last = -1
        
        while True:
            try:
                self.x.terminate()
            except:
                pass
            
            # if i == last:
            #     continue
            if randint(0,5) == 0:
                self.showimage()
            else:
               self.playvideo()

    def showimage(self):
        totalimages = len(self.images)-1
        i = randint(0, totalimages)
        if i == self.lastimage:
            i += 1
            if i > totalimages:
                i = 0
        self.lastimage = i
        self.image.show(self.images[i])
        cv2.waitKey(1000)

    def playvideo(self):
        totalvideos = len(self.videos)-1
        i = randint(0, totalvideos)
        if i == self.lastvideo:
            i += 1
            if i > totalvideos:
                i = 0
        self.lastvideo = i
        video = self.videos[i]
        print(video)
        self.video.start(video)
        self.image.blank()
        cv2.waitKey(1)

def main():

    client = mqtt.Client()
    app = App(client, int(sys.argv[1]), int(sys.argv[2]))
    client.on_connect = app.on_connect
    client.on_message = app.on_message

    client.connect("10.1.1.162", 1883, 60)

    client.loop_forever()


if __name__ == "__main__":
    main()