import {Injectable} from '@angular/core';
import {HttpClient, HttpParams} from "@angular/common/http";
import {Observable, Subscription} from "rxjs";
import {SelectedFilter} from "../model/selected-filter";
import {SelectedFilterService} from "./selected-filter.service";
import {environment} from "../../../environments/environment";
import {Field} from "../model/field";

@Injectable({
  providedIn: 'root'
})
export class SearchResultsService {

  private selectedFilters: Array<SelectedFilter> = [];
  private selectedFiltersSub: Subscription;

  constructor(private http: HttpClient, private selectedFilterService: SelectedFilterService) {
    this.selectedFiltersSub = this.selectedFilterService.selectedFilters$.subscribe(selectedFilters => {
      this.selectedFilters = selectedFilters;
    });
  }

  getResults(endPoint: string, start: number, rows: number): Observable<any> {
    let params = new HttpParams();

    params = params.append('start', start.toString());
    params = params.append('rows', rows.toString());

    for (const key of this.selectedFilters) {
      let field = Field.getField(key.name);
      if(field){
        params = params.append(key.name, JSON.stringify(key.value));
      }
    }
    return this.http.get(environment.apiUrl + endPoint, {observe: 'response', params: params});
  }

  getObservationDetails(id: string): Observable<any> {
    let params = new HttpParams();
    params = params.append('solr_id', id);
    console.warn('Obs Details Query');
    console.log(params);
    return this.http.get(environment.apiUrl + 'restapi_get_full_exec_block_details', {observe: "response", params: params});
  }

  getProjectDetails(id: string): Observable<any> {
    let params = new HttpParams();
    params = params.append('project_code', '"' + id + '"');
    console.warn('Project Details Query');
    console.log(params);
    return this.http.get(environment.apiUrl + 'restapi_get_paged_exec_blocks', {observe: "response", params: params});
  }

}