import { HttpErrorResponse } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { StrutturePubblicheControllerFindManyStrutture$Params } from '@api/fn/strutture-pubbliche/strutture-pubbliche-controller-find-many-strutture';
import { LuoghiApiClient, StrutturePubblicheApiClient } from '@api/services';
import { catchError, map, throwError } from 'rxjs';

@Injectable({
  providedIn: 'root',
})
export class StrutturePubblicheService {
  constructor(
    private strutturePubblicheApiClient: StrutturePubblicheApiClient,
    private luoghiApiClient: LuoghiApiClient,
  ) {}

  getStrutture(filters: StrutturePubblicheControllerFindManyStrutture$Params) {
    return this.strutturePubblicheApiClient
      .strutturePubblicheControllerFindManyStrutture(filters)
      .pipe(
        map((res) => res),
        catchError((err: HttpErrorResponse) => {
          return throwError(() => err);
        }),
      );
  }

  getLuoghiEsteso(q: string, flagAttivo?: number) {
    const params = {
      q: q,
      flagAttivo: flagAttivo,
    };

    return this.luoghiApiClient.luoghiControllerFindLuogoEsteso(params).pipe(
      map((res) => ({ rows: res, rowsTotalCount: res.length })),
      catchError((err: HttpErrorResponse) => {
        return throwError(() => err);
      }),
    );
  }

  getTipologieStrutture() {
    return this.strutturePubblicheApiClient
      .strutturePubblicheControllerFindManyTipiStrutture()
      .pipe(
        catchError((err: HttpErrorResponse) => {
          return throwError(() => err);
        }),
      );
  }
}
