import { Component, Input } from '@angular/core';
import { Store } from '@ngrx/store';
import { getPropertyValue } from '@zionapps/core';
import { INgRxCoreError } from '@zionapps/ngrx-core';
import { AlertController } from 'ionic-angular';
import { <%= pascalCase(pluralDomainName) %>Actions } from '../../../store/<%= paramCase(pluralDomainName) %>/<%= paramCase(pluralDomainName) %>.actions';
import { <%= pascalCase(singularDomainName) %>, <%= pascalCase(pluralDomainName) %>Config } from '../../../store/<%= paramCase(pluralDomainName) %>/<%= paramCase(pluralDomainName) %>.domain';
import { <%= pascalCase(singularDomainName) %>Selectors } from '../../../store/<%= paramCase(pluralDomainName) %>/<%= paramCase(pluralDomainName) %>.selectors';

@Component({
  selector: '<%= paramCase(singularDomainName) %>-widget',
  templateUrl: '<%= paramCase(singularDomainName) %>-widget.html'
})
export class <%= pascalCase(singularDomainName) %>WidgetComponent {
  @Input() loading: boolean;

  readonly <%= camelCase(singularDomainName) %>$ = this.store.select(<%= pascalCase(singularDomainName) %>Selectors.SelectCurrent);
  readonly source = '<%= pascalCase(singularDomainName) %>Widget';

  constructor(private alertCtrl: AlertController, private store: Store<any>) {}

  on<%= pascalCase(singularDomainName) %>Error(err: INgRxCoreError): void {
    const { message } = err;
    this.alertCtrl.create({
      title: '',
      message,
      buttons: ['Ok'],
    }).present().catch(console.error);
  }

  on<%= pascalCase(singularDomainName) %>Save(<%= camelCase(singularDomainName) %>: <%= pascalCase(singularDomainName) %>): void {
    if (<%= camelCase(singularDomainName) %>) {
    const id = getPropertyValue(<%= camelCase(singularDomainName) %>, <%= pascalCase(pluralDomainName) %>Config.idProperty, undefined);
    if (id) {
        this.store.dispatch(<%= pascalCase(pluralDomainName) %>Actions.UpdateOneRemoteRequest(<%= camelCase(singularDomainName) %>, { source: this.source }));
      } else {
        this.store.dispatch(<%= pascalCase(pluralDomainName) %>Actions.CreateOneRemoteRequest(<%= camelCase(singularDomainName) %>, { source: this.source }));
      }
    }
  }
}



