"""
* Author: "PepDebian(peppermintosteam@proton.me)
*
* License: SPDX-License-Identifier: GPL-3.0-or-later
*
* This is for the suggested packages GUI
"""
import os
import subprocess
import tkinter as tk
import ttkbootstrap as ttk

pwin = ttk.Window(themename="darkly")
pwin.title("Suggested Packages")
pwin.resizable(False, False)
WINDOW_HEIGHT = 470
WINDOW_WIDTH = 470

def center_screen():
    """ gets the coordinates of the center of the screen """
    screen_width = pwin.winfo_screenwidth()
    screen_height = pwin.winfo_screenheight()
    # Coordinates of the upper left corner of the window to make the window
    # appear in the center
    x_cordinate = int((screen_width / 2) - (WINDOW_WIDTH / 2))
    y_cordinate = int((screen_height / 2) - (WINDOW_HEIGHT / 2))
    pwin.geometry("{}x{}+{}+{}".format(WINDOW_WIDTH,
                   WINDOW_HEIGHT, x_cordinate, y_cordinate))

def check_packages():
    """ Check if software is installed"""
    if os.path.exists('/usr/bin/atril'):
        pdf_viewer['state'] = tk.DISABLED
    if os.path.exists('/usr/bin/snap'):
        snap['state'] = tk.DISABLED
    if os.path.exists('/usr/bin/parole'):
        media_player['state'] = tk.DISABLED
    if os.path.exists('/usr/bin/gufw'):
        fire_wall['state'] = tk.DISABLED
    if os.path.exists('/usr/bin/flatpak'):
        flatpak['state'] = tk.DISABLED
    if os.path.exists('/usr/bin/timeshift'):
        backup_tool['state'] = tk.DISABLED
    if os.path.exists('/usr/bin/gnome-software'):
        store['state'] = tk.DISABLED


def check_web_browsers():
    """ Check what browsers are installed"""
    if os.path.exists('/usr/bin/firefox'):
        fire_fox['state'] = tk.DISABLED
    if os.path.exists('/usr/bin/konqueror'):
        kde_web['state'] = tk.DISABLED
    if os.path.exists('/usr/bin/qutebrowser'):
        qute_web['state'] = tk.DISABLED
    if os.path.exists('/usr/bin/falkon'):
        falkon_web['state'] = tk.DISABLED
    if os.path.exists('/usr/bin/chromium'):
        chromium_web['state'] = tk.DISABLED
    if os.path.exists('/usr/bin/epiphany-browser'):
        gnome_web['state'] = tk.DISABLED
    if os.path.exists('/usr/bin/gnome-software'):
        store['state'] = tk.DISABLED


# ***Install Packages***
def install_atril():
    """ Install atril """
    subprocess.Popen(["x-terminal-emulator", "-e", "sudo", "apt", "install",
                      "atril"]
                    )
    check_packages()


def install_keepass():
    """ Install KeePass """
    subprocess.Popen(["x-terminal-emulator", "-e", "sudo", "apt", "install",
                      "keepassxc"]
                    )
    check_packages()


def install_parole():
    """ Install parole """
    subprocess.Popen(["x-terminal-emulator", "-e", "sudo", "apt", "install",
                      "parole"]
                    )
    check_packages()


def install_gufw():
    """ Install gufw """
    subprocess.Popen(["x-terminal-emulator", "-e", "sudo", "apt", "install",
                      "gufw"]
                    )
    check_packages()


def install_snap():
    """ Install install snap"""
    subprocess.Popen(["x-terminal-emulator", "-e", "sudo", "apt", "install",
                      "snapd"]
                    )
    check_packages()


def install_flatpak():
    """ Install flatpak """
    subprocess.Popen(["x-terminal-emulator", "-e", "sudo", "apt", "install",
                      "flatpak"]
                    )
    check_packages()


def install_store():
    """ Install gnome store"""
    subprocess.Popen(["x-terminal-emulator", "-e", "sudo", "apt", "install",
                      "gnome-software"]
                    )
    check_packages()


def install_timeshift():
    """ Install timeshift"""
    subprocess.Popen(["x-terminal-emulator", "-e", "sudo", "apt", "install",
                      "timeshift"]
                    )
    check_packages()


# ***Web browser defs***
def install_firefox():
    """ Install firefox-esr """
    subprocess.Popen(["x-terminal-emulator", "-e", "sudo", "apt", "install",
                      "firefox-esr"]
                    )
    check_web_browsers()


def install_konqueror():
    """ Install konqueror """
    subprocess.Popen(["x-terminal-emulator", "-e", "sudo", "apt", "install",
                      "konqueror"]
                    )
    check_web_browsers()


def install_epiphany():
    """ Install epiphany-browser """
    subprocess.Popen(["x-terminal-emulator", "-e", "sudo", "apt", "install",
                      "epiphany-browser"]
                    )
    check_web_browsers()


def install_tor():
    """ Install torbrowser-launcher """
    subprocess.Popen(["x-terminal-emulator", "-e", "sudo", "apt", "install",
                      "torbrowser-launcher"]
                    )
    check_web_browsers()


def install_qute():
    """ Install install qutebrowser"""
    subprocess.Popen(["x-terminal-emulator", "-e", "sudo", "apt", "install",
                      "qutebrowser"]
                    )
    check_web_browsers()


def install_chromium():
    """ Install chromium"""
    subprocess.Popen(["x-terminal-emulator", "-e", "sudo", "apt", "install",
                      "chromium"]
                    )
    check_web_browsers()


def install_falkon():
    """ Install falkon"""
    subprocess.Popen(["x-terminal-emulator", "-e", "sudo", "apt", "install",
                      "falkon"]
                    )
    check_web_browsers()


def check_base_snaps():
    """ If Devuan is loaded do not show snaps """
    if os.path.exists("/etc/devuan_version"):
        flatpak = ttk.Button(software_frame,
                             text="Flatpak Package Platform",
                             cursor="hand2", style="dark",
                             command=install_flatpak
                             )
        flatpak.grid(row=4, column=0, ipadx=5, ipady=5, padx=5, pady=5,
                     sticky='ew'
                    )
        store = ttk.Button(software_frame,
                           text="Gnome Software Store",
                           cursor="hand2", style="dark",
                           command=install_store
                           )
        store.grid(row=5, column=0, ipadx=5, ipady=5, padx=5, pady=5,
                   sticky='ew'
                   )
        backup_tool = ttk.Button(software_frame,
                                 text="TimeShift: Backup Tool",
                                 cursor="hand2", style="dark",
                                 command=install_keepass
                                 )
        backup_tool.grid(row=7, column=0, ipadx=5, ipady=5, padx=5, pady=5,
                         sticky='ew'
                         )
        pwd_tool = ttk.Button(software_frame,
                                 text="KeePassXC: Password Tool",
                                 cursor="hand2", style="dark",
                                 command=install_timeshift
                                 )
        pwd_tool.grid(row=6, column=0, ipadx=5, ipady=5, padx=5, pady=5,
                         sticky='ew'
                         )

    elif os.path.exists("/etc/debian_version"):
        snap = ttk.Button(software_frame,
                          text="Snap Package Platform",
                          cursor="hand2", style="dark",
                          command=install_snap
                          )
        snap.grid(row=4, column=0, ipadx=5, ipady=5, padx=5, pady=5,
                  sticky='ew'
                  )
        flatpak = ttk.Button(software_frame,
                             text="Flatpak Package Platform",
                             cursor="hand2", style="dark",
                             command=install_flatpak
                             )
        flatpak.grid(row=5, column=0, ipadx=5, ipady=5, padx=5, pady=5,
                     sticky='ew'
                     )
        store = ttk.Button(software_frame,
                           text="Gnome Software Store",
                           cursor="hand2", style="dark",
                           command=install_store
                           )
        store.grid(row=6, column=0, ipadx=5, ipady=5, padx=5, pady=5,
                   sticky='ew'
                   )
        backup_tool = ttk.Button(software_frame,
                                 text="TimeShift: Backup Tool",
                                 cursor="hand2", style="dark",
                                 command=install_timeshift
                                 )
        backup_tool.grid(row=7, column=0, ipadx=5, ipady=5, padx=5, pady=5,
                         sticky='ew'
                         )



# *** Below here is the layout of the forms***
# Frame that managed the Welcome To Peppermint Section
fsw = ttk.Frame(pwin, width=200)
fsw.grid(row=2, column=0, columnspan=4)
software_frame = ttk.Labelframe(fsw, bootstyle="warning",
                                text="Suggested Software"
                                )
software_frame.grid(row=5, column=0, columnspan=2, ipadx=0, ipady=0,
                    padx=10, pady=10
                    )
# Buttons for the suggested software
pdf_viewer = ttk.Button(software_frame, text="Atril: a document viewer",
                        cursor="hand2", style="dark", command=install_atril
                        )
pdf_viewer.grid(row=0, column=0, ipadx=5, ipady=5, padx=5, pady=5,
                sticky='ew'
                )
media_player = ttk.Button(software_frame, text="Parole: Media Player",
                          cursor="hand2", style="dark", command=install_parole
                          )
media_player.grid(row=2, column=0, ipadx=5, ipady=5, padx=5, pady=5,
                  sticky='ew'
                  )
fire_wall = ttk.Button(software_frame, text="gufw: GNU Firewall",
                       cursor="hand2", style="dark", command=install_gufw
                       )
fire_wall.grid(row=3, column=0, ipadx=5, ipady=5, padx=5, pady=5,
               sticky='ew'
               )
# Frame that manages the Browser buttons
fs = ttk.Frame(pwin)
fs.grid(row=2, column=5, columnspan=2, ipadx=0, ipady=0, padx=10, pady=10)

# Frame Title
soc = ttk.Labelframe(fs, bootstyle="warning", text="Suggested Web Browsers")
soc.grid(row=5, column=0, columnspan=2, ipadx=0, ipady=0, padx=10, pady=10)

# Web Browser Buttons
fire_fox = ttk.Button(soc, text="Firefox ESR Browser", cursor="hand2",
                      style="dark", command=install_firefox
                      )
fire_fox.grid(row=0, column=0, ipadx=5, ipady=5, padx=5, pady=5, sticky='ew')

kde_web = ttk.Button(soc, text="Konqueror KDE Browser", cursor="hand2",
                     style="dark", command=install_konqueror
                     )
kde_web.grid(row=1, column=0, ipadx=5, ipady=5, padx=5, pady=5, sticky='ew')

gnome_web = ttk.Button(soc, text="Gnome Web(Epiphany)", cursor="hand2",
                       style="dark", command=install_epiphany
                       )
gnome_web.grid(row=2, column=0, ipadx=5, ipady=5, padx=5, pady=5, sticky='ew')

tor_web = ttk.Button(soc, text="Tor Browser: Privacy", cursor="hand2",
                     style="dark", command=install_tor
                     )
tor_web.grid(row=3, column=0, ipadx=5, ipady=5, padx=5, pady=5, sticky='ew')

qute_web = ttk.Button(soc, text="Qutebrowser: Vim-like ", cursor="hand2",
                      style="dark", command=install_qute
                      )
qute_web.grid(row=4, column=0, ipadx=5, ipady=5, padx=5, pady=5, sticky='ew')

chromium_web = ttk.Button(soc, text="Chromium Browser", cursor="hand2",
                          style="dark-", command=install_chromium
                          )
chromium_web.grid(row=6, column=0, ipadx=5, ipady=5, padx=5, pady=5,
                  sticky='ew'
                  )
falkon_web = ttk.Button(soc, text="Falkon Qt Browser", cursor="hand2",
                        style="dark", command=install_falkon
                        )
falkon_web.grid(row=7, column=0, ipadx=5, ipady=5, padx=5, pady=5, sticky='ew')

lblpmtitle = ttk.Label(pwin, style="F62817.TLabel",
                       text='These suggestions are listed in the official'
                            ' repositories'
                       ).place(x=5, y=440)
check_base_snaps()
check_packages()
check_web_browsers()
center_screen()
pwin.mainloop()
