import { DomainException } from '../../shared/exceptions/domain.exception';

/**
 * 文件 SHA256 哈希值对象
 */
export class FileSha256 {
  private readonly _value: string;

  private constructor(value: string) {
    this._value = value;
  }

  get value(): string {
    return this._value;
  }

  static create(value: string): FileSha256 {
    if (!value || value.trim() === '') {
      throw new DomainException('FileSha256 cannot be empty');
    }

    const trimmed = value.trim().toLowerCase();

    // SHA256 哈希值长度为 64 个十六进制字符
    if (trimmed.length !== 64) {
      throw new DomainException('FileSha256 must be 64 characters long');
    }

    if (!/^[a-f0-9]{64}$/.test(trimmed)) {
      throw new DomainException('FileSha256 must contain only hexadecimal characters');
    }

    return new FileSha256(trimmed);
  }

  equals(other: FileSha256): boolean {
    return this._value === other._value;
  }

  toString(): string {
    return this._value;
  }
}
