#!/bin/python3

import os
import sys
import datetime
import glob
from pathlib import Path

for root, dirs, _ in os.walk("/usr/lib/python3/dist-packages"):
    for dir_name in dirs:
        if dir_name.startswith("UpgradeCheck"):
            sys.path.append(os.path.join(root, dir_name))
        if dir_name.startswith("DependCheck"):
            sys.path.append(os.path.join(root, dir_name))

from UpgradeCheck.util_conf import KpctConf
from UpgradeCheck.util_deb import KpctDeb
from UpgradeCheck.util_log import Log
from UpgradeCheck.util_dbus import ExternalController
from UpgradeCheck.util_database import KylinUpGradeDataBase

from UpgradeCheck.fix_conf import ThirdConf, FixJar
from UpgradeCheck.fix_security import Security

def main():
    start_time = datetime.datetime.now()

    kuc_log = Log().getlog()
    kuc_log.info('===== Upgrade升级修复检测: 扫描结果收集开始')
    kpct_conf = KpctConf(kuc_log)
    save_path = kpct_conf.save_path

    report_path = ""

    fix_list = [
        ThirdConf,
        FixJar,
        Security
    ]

# 搜索所有数据库文件
    db_files = glob.glob("/home/*/.kpct/UpgradeCheck/collect_information.db")
    
    if not db_files:
        print("未找到collect_information.db文件")
        exit(1)
    
    # 找到最新的文件
    db_path = max(db_files, key=lambda f: Path(f).stat().st_mtime)
    kuc_log.info(db_path)

    # current_user = os.getlogin()
    # db_path = '/home/{}/.kpct/UpgradeCheck/{}'.format(current_user, 'collect_information.db')

    if not os.path.exists(save_path):
        os.makedirs(save_path)

    if not os.path.exists(db_path):
        kuc_log.error('===== Upgrade升级修复: 扫描结果报告不存在，执行安全执行修复')
        fix_list = [Security]


    if not os.path.exists(db_path):
        kuc_log.error('===== Upgrade升级修复: 数据库文件不存在，停止修复')
        return
    else:
        kdb = KylinUpGradeDataBase(db_path)
        for fix in fix_list:
            obj = fix(kuc_log, kdb)
            obj.run()
        kdb.close()

    end_time = datetime.datetime.now()
    kuc_log.info("===== Upgrade升级后修复: 信息检测结束")
    kuc_log.info("===== 修复运行时间：{}s".format((end_time - start_time).total_seconds()))

if __name__ == "__main__":
    main()
