
import ast
import os
from datetime import datetime

import cv2


def get_formatted_timestamp():
    """
    获取当前时间戳并格式化为 年_月_日_时_分_秒_毫秒 格式

    :return: 格式化后的时间戳字符串
    """
    # 获取当前时间
    now = datetime.now()

    # 格式化时间戳
    formatted_timestamp = now.strftime("%Y_%m_%d_%H_%M_%S_%f")

    return formatted_timestamp


def save_list_to_txt(file_path, data_list):
    """
    将 list 存入 txt 文件，每个元素占一行。如果文件不存在则新建，存在则追加。
    
    :param txt_path: 保存的txt路径。
    :param data_list: 待保存的数据列表。
    """
    os.makedirs(os.path.dirname(file_path), exist_ok=True)
    mode = "a" if os.path.exists(file_path) else "w"

    with open(file_path, mode, encoding="utf-8") as f:
        for item in data_list:
            f.write(str(item) + "\n")


def read_list_from_txt(txt_path, parse=False):
    """从 txt 文件读取 list，可选解析数据结构

    :param txt_path: 读取的txt路径。
    :param parse: 是否解析数据，默认False。
    :return: 读取的list。
    """
    with open(txt_path, "r", encoding="utf-8") as f:
        lines = [line.strip() for line in f.readlines()]
        return [ast.literal_eval(line) for line in lines] if parse else lines


def check_video_type(video_path):
    """
    判断视频是 RGB 还是 IR（红外）
    
    :param video_path: 视频路径。
    :return: 视频类型。
    """
    cap = cv2.VideoCapture(video_path)

    if not cap.isOpened():
        print("无法打开视频")
        return None

    ret, frame = cap.read()  # 读取第一帧
    cap.release()

    if not ret:
        print("无法读取视频帧")
        return None

    # 获取通道数
    channels = frame.shape[-1] if len(frame.shape) == 3 else 1

    if channels == 3:
        return 'RGB'
    elif channels == 1:
        return 'IR'
    else:
        return 'RGB'
