import datetime
import random
import time


class TimeUtils:
    """时间工具类"""

    @staticmethod
    def get_timestamp(is_10_digits=False):
        """
        获取当前时间戳

        Args:
            is_10_digits (bool): 是否返回10位时间戳，默认为False（返回13位毫秒时间戳）

        Returns:
            int: 时间戳
        """
        if is_10_digits:
            # 返回10位时间戳（秒级）
            return int(time.time())
        else:
            # 返回13位时间戳（毫秒级）
            return int(time.time() * 1000)

    @staticmethod
    def random_timestamp():
        """
        生成一个随机的时间戳（类似0.842703761170252格式的小数）

        Returns:
            float: 随机时间戳
        """
        return random.random()

    @staticmethod
    def format(time_value, date_format=None, time_format=None, is_24_hour=True):
        """
            格式化指定日期与时间，失败返回空文本

            Args:
                time_value (datetime.datetime or int or float): 欲格式化的时间
                date_format (str, optional): 日期格式，如: yyyy/M/d dddd(年/月/日 星期几)
                time_format (str, optional): 时间格式，如: hh:mm:ss(小时:分钟:秒)
                is_24_hour (bool, optional): 是否为24小时制，默认为True

            Returns:
                str: 格式化后的日期时间字符串，失败返回空字符串
            """
        try:
            # 处理不同类型的输入时间
            if isinstance(time_value, (int, float)):
                # 如果是时间戳，转换为datetime对象
                if time_value > 10000000000:  # 13位时间戳
                    time_value = datetime.datetime.fromtimestamp(time_value / 1000)
                else:  # 10位时间戳
                    time_value = datetime.datetime.fromtimestamp(time_value)
            elif not isinstance(time_value, datetime.datetime):
                return ""

            # 默认格式
            if date_format is None and time_format is None:
                return time_value.strftime("%Y-%m-%d %H:%M:%S")

            # 构建格式化字符串
            format_str = ""

            # 处理日期格式
            if date_format:
                # 替换易语言格式为Python格式
                date_format = date_format.replace("yyyy", "%Y")
                date_format = date_format.replace("MM", "%m")
                date_format = date_format.replace("M", "%m")
                date_format = date_format.replace("dd", "%d")
                date_format = date_format.replace("d", "%d")
                date_format = date_format.replace("dddd", "%A")
                format_str += date_format

            # 添加空格分隔符
            if date_format and time_format:
                format_str += " "

            # 处理时间格式
            if time_format:
                # 处理上午/下午
                if "tt" in time_format:
                    if is_24_hour:
                        time_format = time_format.replace("tt", "")
                        time_format = time_format.replace("hh", "%H")
                        time_format = time_format.replace("h", "%H")
                    else:
                        time_format = time_format.replace("tt", "%p")
                        time_format = time_format.replace("hh", "%I")
                        time_format = time_format.replace("h", "%I")
                else:
                    time_format = time_format.replace("hh", "%H")
                    time_format = time_format.replace("h", "%H")

                time_format = time_format.replace("mm", "%M")
                time_format = time_format.replace("m", "%M")
                time_format = time_format.replace("ss", "%S")
                time_format = time_format.replace("s", "%S")

                format_str += time_format

            # 格式化时间
            result = time_value.strftime(format_str.strip())

            # 处理星期中文显示
            if "%A" in format_str:
                weekdays = {
                    'Monday': '星期一',
                    'Tuesday': '星期二',
                    'Wednesday': '星期三',
                    'Thursday': '星期四',
                    'Friday': '星期五',
                    'Saturday': '星期六',
                    'Sunday': '星期日'
                }
                for eng, chn in weekdays.items():
                    result = result.replace(eng, chn)

            # 处理上午/下午中文显示
            if "%p" in format_str:
                result = result.replace("AM", "上午").replace("PM", "下午")

            return result

        except Exception as e:
            # 发生异常时返回空字符串
            return ""