#!/opt/alt/python27/bin/python

# check /etc/cloudlinux/PANEL
# if FILE absent - create
# if FILE empty - do as FILE absent
# read from FILE panel name
# if panel name change = check panel process end and reinstall lvemanager cagefs lve-utils

from cldetectlib import getCPName
from clcommon.utils import run_command
import os

PANEL_FILE_DIR = '/var/lve'
PANEL_FILE = os.path.join(PANEL_FILE_DIR, 'PANEL')


def is_panel_change():
    """
    :return: True if names are different and new panel name
    """
    panel_name = getCPName()
    try:
        f = open(PANEL_FILE)
        old_panel_name = f.read()
        f.close()
        if old_panel_name != panel_name:
            return True, panel_name
        else:
            return False, panel_name
    except (OSError, IOError):
        # if file doesn't exist - panel doesn't change
        return False, panel_name


def write_panel_file(panel_name):
    try:
        os.mkdir(PANEL_FILE_DIR)
    except OSError:
        pass  # directory already exist
    with open(PANEL_FILE, 'w') as f:
        f.write(panel_name)


def is_panel_process_active(panel_name):
    """
    :param panel_name:
    :return: True if panel is already detect but not install yet
    """
    process_active = False
    if panel_name == 'cPanel':
        process_active = True
        cpanel_install_log = '/var/log/cpanel-install.log'
        # find in log file string Thank you for installing cPanel
        try:
            log = open(cpanel_install_log)
            for line in log:
                if line.find('Thank you for installing cPanel') >= 0:
                    process_active = False
        except (IOError, OSError):
            return process_active
    return process_active


def main():
    (update_file, panel_name) = is_panel_change()
    if update_file:
        if panel_name in ['cPanel', 'Plesk', 'DirectAdmin']:
            if not is_panel_process_active(panel_name):
                retcode, _, std_err = run_command(['yum', 'reinstall', '-y', 'lvemanager', 'lve-utils', 'cagefs', 'alt-python27-cllib'],
                                                  return_full_output=True)
                if retcode == 0 or (retcode == 1 and std_err.find('Nothing to do')):
                    write_panel_file(panel_name)
        else:
            write_panel_file(panel_name)
    # if PANEL_FILE not exists - create it
    if not os.path.exists(PANEL_FILE):
        write_panel_file(panel_name)

if __name__ == '__main__':
    main()
