package com.pig4cloud.pig.statistics.socket;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.UUID;

/**
 * 数据处理器，负责实际的业务逻辑处理
 */
public class DataProcessor {
    // 图片保存路径
    private static final String IMAGE_SAVE_PATH = "images";

    public DataProcessor() {
        // 确保图片目录存在
        createImageDirectory();
    }

    /**
     * 处理接收到的数据
     * @param dataType 数据类型
     * @param content 数据内容
     * @return 响应数据
     */
    public byte[] processData(int dataType, byte[] content) {
        try {
            if (dataType == ProtocolHandler.TYPE_TEXT) {
                // 文本数据，原路返回
                String text = new String(content, "UTF-8");
                System.out.println("收到文本: " + text);
				System.out.println("文本长度: " + text.length());
                return content;
                
            } else if (dataType == ProtocolHandler.TYPE_IMAGE) {
                // 图片数据，保存并返回路径
                String fileName = generateImageFileName();
                String filePath = IMAGE_SAVE_PATH + File.separator + fileName;

                // 保存图片
                Files.write(Paths.get(filePath), content);
                System.out.println("图片已保存: " + filePath);
				System.out.println("图片大小: " + formatFileSize(content.length));
                // 返回保存路径
                return filePath.getBytes("UTF-8");
                
            } else {
                // 未知数据类型
                String errorMsg = "未知的数据类型: " + dataType;
                System.err.println(errorMsg);
                return errorMsg.getBytes("UTF-8");
            }
        } catch (IOException e) {
            String errorMsg = "处理数据错误: " + e.getMessage();
            System.err.println(errorMsg);
            return errorMsg.getBytes();
        }
    }
	// 辅助方法：将字节数格式化为更易读的单位（KB, MB等）
	private String formatFileSize(long bytes) {
		if (bytes < 1024) {
			return bytes + " B";
		} else if (bytes < 1024 * 1024) {
			return String.format("%.2f KB", bytes / 1024.0);
		} else if (bytes < 1024 * 1024 * 1024) {
			return String.format("%.2f MB", bytes / (1024.0 * 1024));
		} else {
			return String.format("%.2f GB", bytes / (1024.0 * 1024 * 1024));
		}
	}

    /**
     * 创建图片保存目录
     */
    private void createImageDirectory() {
        File directory = new File(IMAGE_SAVE_PATH);
        if (!directory.exists()) {
            directory.mkdirs();
        }
    }

    /**
     * 生成唯一的图片文件名
     */
    private String generateImageFileName() {
        return "img_" + System.currentTimeMillis() + "_" + 
               UUID.randomUUID().toString().substring(0, 8) + ".jpg";
    }
}
    