import { Injectable } from '@angular/core';
import { MagMatchMediaService } from 'ng-stalk/core/service';
import { MagConstants } from 'ng-stalk/core/util';
import { NzModalService } from 'ng-zorro-antd/modal';
import { Observable } from 'rxjs';
import { <%= classify(pluralName) %>DialogPageComponent } from './<%= dasherize(pluralName) %>-dialog-page/<%= dasherize(pluralName) %>-dialog-page.component';
import { <%= classify(pluralName) %>DialogResult } from './<%= dasherize(pluralName) %>-dialog-result';
import { <%= classify(pluralName) %>DialogOption } from './<%= dasherize(pluralName) %>-dialog-option';

@Injectable()
export class <%= classify(pluralName) %>DialogOpener {

  constructor(
    private nzModalService: NzModalService,
    private magMatchMediaService: MagMatchMediaService,
  ) { }

  public open(option?: <%= classify(pluralName) %>DialogOption): Observable<<%= classify(pluralName) %>DialogResult> {
    const dialogRef = this.nzModalService.create({
      nzContent: <%= classify(pluralName) %>DialogPageComponent,

      // @ts-ignore
      nzComponentParams: {
        option
      },
      nzWidth: MagConstants.modalWidthSmart(this.magMatchMediaService.activeMediaQuery),
    });

    return new Observable<<%= classify(pluralName) %>DialogResult>((observer) => {
      dialogRef.afterClose.subscribe((result: <%= classify(pluralName) %>DialogResult) => {
        observer.next(result);
      });
    });
  }

}
