#ifndef COMPRESS_H  
#define COMPRESS_H  

#include <stddef.h>  

// 哈夫曼编码结构  
typedef struct {  
    unsigned char byte;  
    unsigned char* code;  
    size_t code_len;  
} HuffmanCode;  

typedef enum {  
    ENCRYPT_METHOD_OFFSET,  // 原来的偏移量加密  
    ENCRYPT_METHOD_XOR      // 新增的XOR加密  
} EncryptMethod;  


// 压缩结果结构  
typedef struct {  
    unsigned char* data;       // 压缩后的数据  
    size_t size;               // 压缩后的大小  
    size_t original_size;      // 原始文件大小  
    HuffmanCode* codes;        // 编码表  
    size_t unique_chars;       // 唯一字符数  
} CompressResult;  

int compress_file(const char* filename,   
    const char* sender_info,   
    const char* receiver_info,  
    EncryptMethod method);  

int save_compressed_file(const char* filename, CompressResult* result);  
int save_code_table(const char* filename, CompressResult* result);  
void free_compress_result(CompressResult* result);  

#endif // COMPRESS_H
