import { brandingConfig } from '@/branding/branding.config';
import { PwaInstallService } from '@/core/services';
import { Component, EventEmitter, inject, Output } from '@angular/core';
import { ButtonDirective } from 'primeng/button';
import { finalize, forkJoin } from 'rxjs';
import images from 'src/assets/images';
import { PosInfoStore, PosProfileStore } from '../store';
import { DeviceInfoStore } from '../store/device.store';

@Component({
  selector: 'pos-splash',
  templateUrl: 'splash.component.html',
  imports: [ButtonDirective],
})
export class PosSplashComponent {
  @Output() onComplete = new EventEmitter<void>();

  private readonly posProfileStore = inject(PosProfileStore);
  private readonly posInfoStore = inject(PosInfoStore);
  private readonly deviceInfoStore = inject(DeviceInfoStore);
  private readonly pwaInstallService = inject(PwaInstallService);

  logo = images.logo;
  // requireInstall = false;
  requireInstall = brandingConfig.enableInstallPrompt;
  pwaInstalled = this.pwaInstallService.isInstalled;
  canInstall = this.pwaInstallService.canInstall;
  private installPromptShown = false;

  // constructor() {
  //   effect(() => {
  //     if (!this.requireInstall || this.pwaInstalled() || this.installPromptShown) {
  //       // this.getData();
  //       return;
  //     }

  //     if (this.canInstall()) {
  //       this.installPromptShown = true;
  //       this.pwaInstallService.openInstallConfirm();
  //     }
  //   });
  // }

  async ngOnInit() {
    const data = await this.deviceInfoStore.getData();

    this.getData();
    // if (!this.requireInstall || this.pwaInstalled()) {
    // }

    // if (this.canInstall()) {
    //   this.pwaInstallService.openInstallConfirm();
    //   this.installPromptShown = true;
    // }
  }

  async getData() {
    const profileObs = await this.posProfileStore.getData();
    const infoObs = await this.posInfoStore.getData();
    forkJoin([profileObs, infoObs])
      .pipe(
        finalize(() => {
          this.onComplete.emit();
        }),
      )
      .subscribe(([profileResult, infoResult]) => {});
  }

  installPwa() {
    this.pwaInstallService.openInstallConfirm();
  }

  continueAfterInstall() {
    if (this.pwaInstalled()) {
      this.onComplete.emit();
    }
  }
}
