import {
  ChangeRequestStatus,
  CompanyChangeRequest,
  DocumentChangeIntent,
  LicenseChangeIntent,
} from "../entities/company-change-request.entity";

/**
 * A staged profile change request. Used both by the portal (to lock the settings
 * page, show the reviewer note, and prefill the proposed values) and by the
 * backoffice review screen (to render the proposed-vs-current diff).
 */
export class ChangeRequestResponseDto {
  id: string;
  companyId: string;
  status: ChangeRequestStatus;
  /** Proposed field values (Partial<UpdateProfileDto>) — the diff payload. */
  snapshot: Record<string, any>;
  documentFileIds: string[];
  /** Staged business-license add/remove intents attached to this request. */
  licenseChanges: LicenseChangeIntent[];
  /** Staged company-document add/remove intents (e.g. the PoA letter). */
  documentChanges: DocumentChangeIntent[];
  note: string | null;
  submittedBy: string | null;
  submittedAt: Date | null;
  reviewedBy: string | null;
  reviewedAt: Date | null;
  createdAt: Date;
  updatedAt: Date;

  constructor(req: CompanyChangeRequest) {
    this.id = req.id;
    this.companyId = req.companyId;
    this.status = req.status;
    this.snapshot = req.snapshot ?? {};
    this.documentFileIds = req.documents?.documentFileIds ?? [];
    this.licenseChanges = req.documents?.licenseChanges ?? [];
    this.documentChanges = req.documents?.documentChanges ?? [];
    this.note = req.note ?? null;
    this.submittedBy = req.submittedBy ?? null;
    this.submittedAt = req.submittedAt ?? null;
    this.reviewedBy = req.reviewedBy ?? null;
    this.reviewedAt = req.reviewedAt ?? null;
    this.createdAt = req.createdAt;
    this.updatedAt = req.updatedAt;
  }
}
