# -*- coding: utf-8 -*-

import os
import sys

from pathlib import Path
from datetime import datetime, time, timedelta



TS_lOG_DIR = "/root/ts"
TS_LOG_SAVE_DAY = 4


LOGS_FILE = "/var/log/server_log_process.log"
def logs(data):
    if data:
        with open(LOGS_FILE, "a") as f:
            f.write(data)
            f.write("\n")

class TsLogProc:

    def __init__(self, tsdir=TS_lOG_DIR,saveday=TS_LOG_SAVE_DAY):
        self.saveday = saveday
        self.tsdir = tsdir
        self.tslogdir = os.path.join(self.tsdir, "log")
        self.tslogtardir = os.path.join(self.tsdir, "log_tar")


    def ts_log_tar_action(self):
        """
        使用pathlib查找log目录下今天之前的文件
        """
        log_path = Path(self.tslogdir)
        today_start = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)

        files_before_today = []

        if not os.path.exists(self.tslogtardir):
            os.mkdir(self.tslogtardir)
        # 遍历目录下的所有文件
        for file_path in log_path.iterdir():
            if file_path.is_file():
                # 获取文件修改时间
                mtime = datetime.fromtimestamp(file_path.stat().st_mtime)

                if mtime < today_start:
                    findfile = {
                        'path': file_path,
                        'name': file_path.name,
                        'modified': mtime,
                        'size': file_path.stat().st_size
                    }
                    files_before_today.append(findfile)
                    now = datetime.now().strftime("%Y/%m/%d %H:%M:%S")
                    logtarfile = f"{os.path.join(self.tslogtardir, file_path.name)}.tar.gz"
                    logdata = f"{now} | Exec Shell CMD : cd {self.tslogdir} && tar -czf {logtarfile} {file_path.name} && rm -rf {file_path.name}"
                    logs(logdata)
                    os.system(f"cd {self.tslogdir} && tar -czf {logtarfile} {file_path.name} && rm -rf {file_path.name}")
                    if os.path.exists(logtarfile):
                        logs( f"{now} | MSG : Log File {logtarfile} tar Success")
                        logs(
                            f"{now} | MSG : Delete Log File {logtarfile}")
                        os.system(
                            f"cd {self.tslogdir} && rm -rf {file_path.name}")
                    else:
                        logs(
                            f"{now} | MSG : Log File {logtarfile} tar Faile")


        return files_before_today

    def delete_old_ts_log(self):
        """
        删除指定目录下days天之前的文件

        Args:
            directory: 目录路径
            days: 天数，默认7天
        """
        dir_path = Path(self.tslogtardir)

        # 检查目录是否存在
        if not dir_path.exists():
            return

        cutoff_date = datetime.now() - timedelta(self.saveday)

        print(f"正在删除 {self.tslogtardir} 目录下 {self.saveday} 天前的文件...")
        print(f"截止时间: {cutoff_date.strftime('%Y-%m-%d %H:%M:%S')}")

        # 遍历目录下的所有文件（不包含子目录）
        for file_path in dir_path.iterdir():
            if file_path.is_file():
                try:
                    # 获取文件修改时间
                    mtime = datetime.fromtimestamp(file_path.stat().st_mtime)
                    if mtime < cutoff_date:
                        # 删除文件
                        file_path.unlink()
                        now = datetime.now().strftime("%Y/%m/%d %H:%M:%S")
                        print (f"{now} | MSG : Delete Log Tar File {file_path}  Success")
                        logs(f"{now} | MSG : Delete Log Tar File {file_path}  Success")

                except PermissionError:
                    print(f"{now} | MSG : Delete Log Tar File {file_path}  Faile")
                    logs(f"{now} | MSG : Delete Log Tar File {file_path}  Faile")
                except Exception as e:
                    print(f"{now} | MSG : Delete Log Tar File {file_path}  Faile")
                    logs(f"{now} | MSG : Delete Log Tar File {file_path}  Faile")

class ZeronewsLogProc:

    def __init__(self, moddir=None, saveday=None):
        self.moddir = moddir
        self.saveday = saveday

    def delete_old_ts_log(self):
        """
        删除指定目录下days天之前的文件
        Args:
            directory: 目录路径
            days: 天数，默认7天
        """
        tarlogdir = os.path.join(self.moddir, "log_tar")
        tarlogdir_path = Path(tarlogdir)

        # 检查目录是否存在
        if not tarlogdir_path.exists():
            return

        cutoff_date = datetime.now() - timedelta(self.saveday)

        print(f"正在删除 {tarlogdir} 目录下 {self.saveday} 天前的文件...")
        print(f"截止时间: {cutoff_date.strftime('%Y-%m-%d %H:%M:%S')}")

        # 遍历目录下的所有文件（不包含子目录）
        for file_path in tarlogdir_path.iterdir():
            if file_path.is_file():
                try:
                    # 获取文件修改时间
                    mtime = datetime.fromtimestamp(file_path.stat().st_mtime)
                    if mtime < cutoff_date:
                        # 删除文件
                        file_path.unlink()
                        now = datetime.now().strftime("%Y/%m/%d %H:%M:%S")
                        print (f"{now} | MSG : Delete Log Tar File {file_path}  Success")
                        logs(f"{now} | MSG : Delete Log Tar File {file_path}  Success")

                except PermissionError:
                    print(f"{now} | MSG : Delete Log Tar File {file_path}  Faile")
                    logs(f"{now} | MSG : Delete Log Tar File {file_path}  Faile")
                except Exception as e:
                    print(f"{now} | MSG : Delete Log Tar File {file_path}  Faile")
                    logs(f"{now} | MSG : Delete Log Tar File {file_path}  Faile")

    def tar_log_action(self):
        """
        使用pathlib查找log目录下今天之前的文件
        """

        logdir = os.path.join(self.moddir, "zeronews-hono")
        tarlogdir = os.path.join(self.moddir, "log_tar")
        log_path = Path(logdir)
        today_start = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)

        files_before_today = []

        if not os.path.exists(tarlogdir):
            os.mkdir(tarlogdir)
        # 遍历目录下的所有文件
        for file_path in log_path.iterdir():
            if file_path.is_file():
                # 获取文件修改时间
                mtime = datetime.fromtimestamp(file_path.stat().st_mtime)

                if mtime < today_start:

                    now = datetime.now().strftime("%Y/%m/%d %H:%M:%S")
                    logtarfile = f"{os.path.join(tarlogdir, file_path.name)}.tar.gz"
                    logdata = f"{now} | Exec Shell CMD : cd {logdir} && tar -czf {logtarfile} {file_path.name} && rm -rf {file_path.name}"
                    logs(logdata)
                    os.system(f"cd {logdir} && tar -czf {logtarfile} {file_path.name} && rm -rf {file_path.name}")
                    if os.path.exists(logtarfile):
                        logs( f"{now} | MSG : Log File {logtarfile} tar Success")
                        logs(
                            f"{now} | MSG : Delete Log File {logtarfile}")
                        os.system(
                            f"cd {logdir} && rm -rf {file_path.name}")
                    else:
                        logs(
                            f"{now} | MSG : Log File {logtarfile} tar Faile")


# 使用示例
def main():
    # files = TsLogProc().delete_old_ts_log()
    controllerdir = "/data/takin-backend/testlogs/logs"
    ctrllog = ZeronewsLogProc(controllerdir, 5)
    ctrllog.tar_log_action()
    ctrllog.delete_old_ts_log()

if __name__ == '__main__':
    main()
