import { isUUID } 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 AssetSelectorQueryFieldUuid 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 uuid = val.toString();
    if (!isUUID(uuid)) {
      throw new ApiError('Not valid id', ApiErrorCodes.PARAM_BAD_VALUE);
    }
    return val;
  }
}
