import { Injectable } from '@angular/core';
import { HttpClient, HttpParams } from '@angular/common/http';
import { Observable } from 'rxjs';

import { environment } from '../../environments/environment';
import {
  ExpensesKpiResponse,
  OverviewKpiResponse,
  ReceivablesKpiResponse,
  SalesKpiResponse
} from '../models/report-kpi.model';

@Injectable({
  providedIn: 'root'
})
export class ReportsService {
  private readonly apiUrl = `${environment.apiBaseUrl}/reports/kpis`;

  constructor(private http: HttpClient) {}

  getOverview(date?: string): Observable<OverviewKpiResponse> {
    return this.http.get<OverviewKpiResponse>(`${this.apiUrl}/overview`, {
      params: this.buildParams(date)
    });
  }

  getSales(date?: string): Observable<SalesKpiResponse> {
    return this.http.get<SalesKpiResponse>(`${this.apiUrl}/sales`, {
      params: this.buildParams(date)
    });
  }

  getReceivables(date?: string): Observable<ReceivablesKpiResponse> {
    return this.http.get<ReceivablesKpiResponse>(`${this.apiUrl}/receivables`, {
      params: this.buildParams(date)
    });
  }

  getExpenses(date?: string): Observable<ExpensesKpiResponse> {
    return this.http.get<ExpensesKpiResponse>(`${this.apiUrl}/expenses`, {
      params: this.buildParams(date)
    });
  }

  private buildParams(date?: string): HttpParams {
    let params = new HttpParams();

    if (date) {
      params = params.set('date', date);
    }

    return params;
  }
}
