import { brandingConfig } from '@/branding/branding.config';
import { Component, computed, signal } from '@angular/core';

@Component({
  selector: 'pos-about-page',
  templateUrl: './root.component.html',
})
export class PosAboutPageComponent {
  // private readonly swUpdate = inject(SwUpdate);

  brandingInfo = brandingConfig;
  appVersion = signal('0.0.0');
  // isPwaBuild = this.swUpdate.isEnabled;
  isCheckingUpdate = signal(false);
  hasUpdate = signal(false);
  isUpdated = signal(false);

  updateCtaLabel = computed(() => {
    // if (!this.isPwaBuild) return 'به روزرسانی فقط در نسخه PWA';
    if (this.isUpdated()) return 'به روز است';
    if (this.hasUpdate()) return 'به روزرسانی برنامه';
    if (this.isCheckingUpdate()) return 'در حال بررسی...';
    return 'بررسی به روزرسانی';
  });

  ngOnInit() {
    // if (!this.isPwaBuild) return;

    this.loadVersion();
    // this.swUpdate.versionUpdates
    //   .pipe(filter((event): event is VersionReadyEvent => event.type === 'VERSION_READY'))
    //   .subscribe((event) => {
    //     const appData = event.latestVersion.appData as { appVersion?: string } | undefined;
    //     this.appVersion.set(appData?.appVersion || this.appVersion());
    //     this.hasUpdate.set(true);
    //     this.isUpdated.set(false);
    //   });
  }

  async onUpdateCtaClick() {
    // if (!this.isPwaBuild || this.isCheckingUpdate()) return;

    if (this.hasUpdate()) {
      await this.applyUpdate();
      return;
    }

    await this.checkForUpdate();
  }

  private async checkForUpdate() {
    this.isCheckingUpdate.set(true);
    this.isUpdated.set(false);
    try {
      // const hasUpdate = await this.swUpdate.checkForUpdate();
      // this.hasUpdate.set(hasUpdate);
      // this.isUpdated.set(!hasUpdate);
    } finally {
      this.isCheckingUpdate.set(false);
    }
  }

  private async applyUpdate() {
    this.isCheckingUpdate.set(true);
    try {
      // await this.swUpdate.activateUpdate();
      this.isUpdated.set(true);
      this.hasUpdate.set(false);
      window.location.reload();
    } finally {
      this.isCheckingUpdate.set(false);
    }
  }

  private loadVersion() {
    fetch('/ngsw.json')
      .then((res) => res.json())
      .then((data: { appData?: { appVersion?: string } }) => {
        this.appVersion.set(data?.appData?.appVersion || this.appVersion());
      })
      .catch(() => {});
  }
}
