'use strict';

import {Observable} from 'rxjs';
import {Connector} from 'blow-service';
import {Query} from 'blow-query';
import {Entity} from '../Entity';

export class DataConnector extends Connector {

  protected _buildQueryWhereForId(id: string) {
    return this._prepareQueryWhere({
      _id: id
    });
  }

  protected _prepareQueryWhere(queryWhere: { [key: string]: any }): { [key: string]: any } {
    return Object.assign({}, queryWhere);
  }

  protected _prepareQuery(query: Query): { [key: string]: any, where?: any } {
    let q;
    if (query instanceof Query) {
      q = query.toJSON();
    } else {
      q = query;
    }
    q = Object.assign({ where: {} }, q);
    q.where = this._prepareQueryWhere(q.where);
    return q;
  }

  count(collectionName: string, query?: Query): Observable<number> {
    return <any>Observable.of('Not implemented');
  }

  delete(collectionName: string, query?: Query): Observable<number> {
    return <any>Observable.of('Not implemented');
  }

  deleteById(collectionName: string, id: any): Observable<boolean> {
    return <any>Observable.of('Not implemented');
  }

  find<T>(collectionName: string, query?: Query): Observable<T> {
    return <any>Observable.of('Not implemented');
  }

  get<T>(collectionName: string, id: any): Observable<T> {
    return <any>Observable.of('Not implemented');
  }

  save<T>(collectionName: string, doc: Entity): Observable<T> {
    return <any>Observable.of('Not implemented');
  }

  updateAttributes<T>(collectionName: string, id: string, doc: Entity): Observable<T> {
    return <any>Observable.of('Not implemented');
  }

}