import { Injectable } from '@angular/core';
import { environment } from 'src/environments/environment';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable, of } from 'rxjs';
import { ExcelModel } from '../model/excel.model';
import { map, tap } from 'rxjs/operators';
import { ExcelContentModel } from '../model/excel-content.model';

@Injectable({
  providedIn: 'root'
})
export class ExcelService {
  url = environment.url
  createStatus: boolean = true
  constructor(private http: HttpClient) { }

  getListExcel(status?: string): Observable<ExcelModel[]> {
    if(status){
      return this.http.get<ExcelModel[]>(this.url + "excel-center/upload/lists?status="+status)
      }else{
      return this.http.get<ExcelModel[]>(this.url + "excel-center/upload/lists")
    }
  }
  getListExcelContent(status?: string): Observable<ExcelContentModel[]> {
    return this.http.get<ExcelContentModel[]>(this.url + "excel-center/content/lists")
  }
  getExcelById(logId:string): Observable<ExcelModel> {
    return this.http.get<ExcelModel>(this.url + "excel-center/upload/"+logId)
  }
  downloadFile(logId:string):Observable<any>{
    return this.http.get(this.url + "excel-center/files/download/"+logId,  { responseType: 'blob'  })
  }
  downloadFileContent(logId:string):Observable<any>{
    return this.http.get(this.url + "excel-center/files/download/content/"+logId, { responseType: 'blob'  });
  }

  createExcel(model: ExcelModel): Observable<boolean> {
    if (this.createStatus) {
      this.createStatus = false
      return this.http.post(this.url + 'excel-center', model, { observe: 'response' })
        .pipe(
          tap(x => this.createStatus = true),
          map(r => r.status == 200)
        );
    } else {
      return of(false)
    }
  }
  deleteExcel(model: ExcelModel): Observable<any> {
    let body = {
      logId: model.logId
    }
    let option = {
      headers: new HttpHeaders({
        "Content-Type": "application/json",
      }),
      body: body
    }
    return this.http.delete<any>(this.url + 'excel-center/upload', option)
  }
  deleteExcelContent(model: ExcelContentModel): Observable<any> {
    let body = {
      excelId: model.excelId
    }
    let option = {
      headers: new HttpHeaders({
        "Content-Type": "application/json",
      }),
      body: body
    }
    return this.http.delete<any>(this.url + 'excel-center/content', option)
  }
  approve(model: ExcelModel): Observable<any> {
    let body = {
      logId: model.logId,
      status: model.status
    }
    return this.http.put<any>(this.url + "excel-center/approve",body)
  }

  getCount(status?: string): Observable<number> {
    return this.http.get<number>(this.url + "excel-center/upload/count")
  }
  getCountContent(status?: string): Observable<number> {
    return this.http.get<number>(this.url + "excel-center/content/count")
  }
}