import { PipeTransform, Injectable, ArgumentMetadata } from '@nestjs/common';

/**
 * JSON 字段转换管道
 * 处理 ThinkPHP 的 JSON 字段特性
 * 自动转换 JSON 字符串和对象
 */
@Injectable()
export class JsonTransformPipe implements PipeTransform {
  transform(value: any, metadata: ArgumentMetadata) {
    if (value === null || value === undefined) {
      return value;
    }

    // 如果是字符串，尝试解析为 JSON
    if (typeof value === 'string') {
      try {
        return JSON.parse(value);
      } catch {
        return value;
      }
    }

    // 如果是对象，转换为 JSON 字符串
    if (typeof value === 'object') {
      return JSON.stringify(value);
    }

    return value;
  }
}

/**
 * JSON 字段转换管道工厂
 * 根据字段名创建特定的转换管道
 */
export class JsonTransformPipeFactory {
  /**
   * 创建 JSON 字段转换管道
   * @param fieldName 字段名
   * @param defaultValue 默认值
   * @returns 转换管道实例
   */
  static create(fieldName: string, defaultValue: any = []) {
    return new JsonTransformPipe();
  }
} 