import logging
import time
import tkinter as tk
from multiprocessing import Process, Queue
from threading import Thread

from PIL import Image, ImageTk

from fishy.helper import helper
from fishy.helper.config import config


def show(win_loc, q):
    logging.debug("started splash process")
    dim = (300, 200)
    top = tk.Tk()

    top.overrideredirect(True)
    top.lift()
    top.attributes('-topmost', True)

    top.title("Loading...")
    top.resizable(False, False)
    top.iconbitmap(helper.manifest_file('icon.ico'))

    canvas = tk.Canvas(top, width=dim[0], height=dim[1], bg='white')
    canvas.pack()
    top.image = Image.open(helper.manifest_file('fishybot_logo.png')).resize(dim)
    top.image = ImageTk.PhotoImage(top.image)
    canvas.create_image(0, 0, anchor=tk.NW, image=top.image)

    # Position splash at the center of the main window

    default_loc = (str(top.winfo_reqwidth()) + "+" + str(top.winfo_reqheight()) + "+" + "0" + "0")
    loc = (win_loc or default_loc).split("+")[1:]
    top.geometry("{}x{}+{}+{}".format(dim[0], dim[1], int(loc[0]) + int(dim[0] / 2), int(loc[1]) + int(dim[1] / 2)))

    def waiting():
        q.get()
        time.sleep(0.2)
        running[0] = False
    Thread(target=waiting).start()

    running = [True]
    while running[0]:
        top.update()
        time.sleep(0.1)

    top.destroy()
    logging.debug("ended splash process")


def create_finish(q):
    def finish():
        q.put("stop")

    return finish


def start():
    q = Queue()
    Process(target=show, args=(config.get("win_loc"), q,)).start()
    return create_finish(q)
