/// <reference path="../typings/tsd.d.ts" />
'use strict';

import {Observable} from 'rxjs';
import {Query} from 'blow-query';
import {DataService, Entity, DataServiceSettings} from '../src/blow-data-service';

interface Country extends Entity {
  _id: string;
  name: string;
  code: string;
}

const settings: DataServiceSettings = {
  // default: {
  //   default: true,
  //   connector: 'mongodb',
  //   settings: {
  //     url: 'mongodb://localhost:27017/test'
  //   }
  // }
  default: {
    default: true,
    connector: 'memory'
  }
}

const dataService = DataService.create(settings);

dataService.connect()
  .subscribe(() => {
    console.log('Connected');
    const countriesCollection = dataService.collection<Country>('countries');
    const data = [{name: 'Poland', code: 'POL'}, {name: 'Ireland', code: 'IRL'}];

    Observable.from(data)
      .mergeMap(countryData => countriesCollection.save(countryData))
      .last()
      .do(() => console.log('Countries saved.'))
      .mergeMap(() => countriesCollection.count())
      .do(c => console.log(`Total number of countries: ${c}`))
      .mergeMap(() => {
        const query = new Query();
        query.equal('code', 'POL')
        return countriesCollection.find(query);
      })
      .do(c => console.log(c))
      .mergeMap((c: Country) => countriesCollection.deleteById(c._id))
      .do(deleted => console.log(`Deleted countries: ${deleted}.`))
      .mergeMap(() => countriesCollection.find())
      .do(c => console.log(c))
      .mergeMap(() => countriesCollection.delete())
      .mergeMap(() => dataService.disconnect())
      .subscribe(() => console.log('DONE'));

  });
