/**
 * 更新个人资料请求 DTO
 */
import {
  UpdateProfileRequestSchema,
  type UpdateProfileRequestInput,
  type UpdateProfileRequestData,
} from "@/data/schemas/user/update_profile_request";

export class UpdateProfileRequest {
  declare readonly username: string;
  declare readonly nickname: string;
  declare readonly preferredLanguage: string;
  declare readonly currentMood: string;

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

  static from(input: UpdateProfileRequestInput): UpdateProfileRequest {
    return new UpdateProfileRequest(input);
  }

  static fromJson(json: unknown): UpdateProfileRequest {
    return UpdateProfileRequest.from(json as UpdateProfileRequestInput);
  }

  toJson(): UpdateProfileRequestData {
    return UpdateProfileRequestSchema.parse(this);
  }
}
