/**
 * 图片上传响应 DTO
 */
import {
  ImageUploadResponseSchema,
  type ImageUploadResponseInput,
  type ImageUploadResponseData,
} from "@/data/schemas/chat/image_upload_response";

export class ImageUploadResponse {
  declare readonly success: boolean;
  declare readonly imageId: string;
  declare readonly thumbUrl: string;
  declare readonly mediumUrl: string;
  declare readonly originalUrl: string;
  declare readonly width: number;
  declare readonly height: number;
  declare readonly bytes: number;

  private constructor(input: ImageUploadResponseInput) {
    const data = ImageUploadResponseSchema.parse(input);
    Object.assign(this, data);
    Object.freeze(this);
  }

  static from(input: ImageUploadResponseInput): ImageUploadResponse {
    return new ImageUploadResponse(input);
  }

  static fromJson(json: unknown): ImageUploadResponse {
    return ImageUploadResponse.from(json as ImageUploadResponseInput);
  }

  toJson(): ImageUploadResponseData {
    return ImageUploadResponseSchema.parse(this);
  }
}
