import { isISO8601 } from 'class-validator';
import { AssetSelectorQueryFieldBase } from '../AssetSelectorQueryFieldBase';
import { AssetPropWhereValue } from '../PropsWhere';
import { ApiError } from '../../../common/error/api-error';
import { ApiErrorCodes } from '../../../common/error/api-error-codes';
import { AssetSelectorQueryBuilding } from '../AssetSelectorQuery';

export class AssetSelectorQueryFieldTimestamp extends AssetSelectorQueryFieldBase {
  dbField: string;

  constructor(name: string, dbField: string) {
    super(name);
    this.dbField = dbField;
  }

  requestProp(qb: AssetSelectorQueryBuilding): string {
    return this.dbField;
  }

  protected prepareFilterValue(val: AssetPropWhereValue): any {
    if (val === null) return null;
    const ts = val.toString();
    if (!isISO8601(ts)) {
      throw new ApiError(
        'Not valid timestamp. Must be in ISO8601',
        ApiErrorCodes.PARAM_BAD_VALUE,
      );
    }
    return ts;
  }
}
