import { ADMIN_FORMSERVICE } from '@admin-client/shared';
import { NavigationService } from '@alfa-client/navigation-shared';
import { AbstractFormService, createEmptyStateResource, isLoaded, StateResource } from '@alfa-client/tech-shared';
import { CommonModule } from '@angular/common';
import { Component, inject, Input } from '@angular/core';
import { Resource } from '@ngxp/rest';
import { ButtonWithSpinnerComponent } from '@ods/component';
import { Observable, of, tap } from 'rxjs';

@Component({
  selector: 'admin-save-button',
  standalone: true,
  imports: [CommonModule, ButtonWithSpinnerComponent],
  templateUrl: './admin-save-button.component.html',
})
export class AdminSaveButtonComponent {
  @Input() successLinkPath: string;

  private readonly formService: AbstractFormService<Resource> = inject(ADMIN_FORMSERVICE);
  private readonly navigationService: NavigationService = inject(NavigationService);

  public stateResource$: Observable<StateResource<Resource>> = of(createEmptyStateResource<Resource>());

  public submit(): void {
    this.stateResource$ = this.formService.submit().pipe(
      tap((stateResource: StateResource<Resource>) => {
        this._navigateOnSuccessfulSubmission(stateResource);
      }),
    );
  }

  _navigateOnSuccessfulSubmission(stateResource: StateResource<Resource>) {
    if (isLoaded(stateResource)) {
      this.navigationService.navigate(this.successLinkPath);
    }
  }
}