import os
from PIL import Image
import numpy as np

from .common import calculate_depth_mean_pil
from tqdm import tqdm 

def depth_apply_mask(image_path):
    """
    基于掩码图像对另一张图像进行掩码处理，背景区域设为黑色

    Args:
        image_path (str): 输入图像的路径
        mask_path (str): 掩码图像的路径
        output_path (str): 保存处理后图像的路径
    """
    # 解析各文件名
    image_name = os.path.splitext(os.path.basename(image_path))[0].split('-')[-1]
    mask_path = f"data/mask_image/mask-{image_name}.png"
    output_path = f"data/mask_depth_image/mask-depth-{image_name}.png"

    # 读取图像和掩码图像
    image = Image.open(image_path)  # 假设已经是单通道
    mask = Image.open(mask_path)    # 假设已经是单通道

    # 将图像和掩码转换为 NumPy 数组
    image_array = np.array(image)
    mask_array = np.array(mask)

    # 创建一个全黑的图像
    masked_image_array = np.zeros_like(image_array)

    # 应用掩码：保留掩码区域的像素，背景设为黑色
    masked_image_array[mask_array > 0] = image_array[mask_array > 0]

    # 将处理后的数组转换回图像
    masked_image = Image.fromarray(masked_image_array)

    # 保存处理后的图像
    masked_image.save(output_path)
    return masked_image

def depth_apply_mask_pilimg(image, mask, image_path):
    """
    基于掩码图像对另一张图像进行掩码处理，背景区域设为黑色

    Args:
        image_path (str): 输入图像的路径
        mask_path (str): 掩码图像的路径
        output_path (str): 保存处理后图像的路径
    """
    # # 解析各文件名
    image_name = os.path.splitext(os.path.basename(image_path))[0]
    # mask_path = f"data/mask_image/mask-{image_name}.png"
    output_path = f"data/mask_depth_image/mask-depth-{image_name}.png"

    # # 读取图像和掩码图像
    # image = Image.open(image_path)  # 假设已经是单通道
    # mask = Image.open(mask_path)    # 假设已经是单通道

    # 将图像和掩码转换为 NumPy 数组
    image_array = np.array(image)
    mask_array = np.array(mask)

    # 创建一个全黑的图像
    masked_image_array = np.zeros_like(image_array)

    # 应用掩码：保留掩码区域的像素，背景设为黑色
    masked_image_array[mask_array > 0] = image_array[mask_array > 0]

    # 将处理后的数组转换回图像
    masked_image = Image.fromarray(masked_image_array)

    # 保存处理后的图像
    masked_image.save(output_path)
    return masked_image

def depth_apply_mask_pilimg_list(images, masks, output_paths):
    """
    对图像列表和掩码列表应用掩码处理，并保存处理后的图像

    Args:
        images (list): 输入图像列表
        masks (list): 掩码图像列表
        output_paths (list): 保存处理后图像的路径列表
    """
    masked_depths = []
    depth_means = []
    for image, mask, output_path in tqdm(zip(images, masks, output_paths)):
        masked_image = depth_apply_mask_pilimg(image, mask, output_path)
        depth_mean = calculate_depth_mean_pil(masked_image)
        masked_depths.append(masked_image)
        depth_means.append(depth_mean)

    return masked_depths, depth_means




# 使用示例
if __name__ == "__main__":
    input_image_path = "depth_image.png"  # 输入图像路径
    mask_image_path = "rmbgmask_image.png"      # 掩码图像路径
    output_image_path = "masked_output_image11.png"

    apply_mask(input_image_path)

