import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { EnvService } from './env.service';
import { AuthService } from './auth.service';

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

  constructor(
    private http: HttpClient,
    private env: EnvService,
    private authService: AuthService,
  ) { }

  getCategories() {
    return this.http.get<any[]>(this.env.API_URL + 'categories-name');
  }

  getEnCategories() {
    return this.http.get<any[]>(this.env.API_URL + 'en-categories-name');
  }

  getParameters() {
    return this.http.get<any[]>(this.env.API_URL + 'parameters');
  }

  getBanks() {
    return this.http.get<any[]>(this.env.API_URL + 'banks');
  }

  checkCategories(category_string: String) {
    const headers = new HttpHeaders({
      'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.get<any[]>(this.env.API_URL + 'check-category' + '?category=' + category_string,
      { headers: headers });
  }

  addCard(token: String, device_id: String) {
    const headers = new HttpHeaders({
        'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.post(this.env.API_URL + 'payments/addcard',
      {token: token, device_id: device_id}, { headers: headers });
  }

  addPostulation(category: String, address: String, int_number: String, references: String, lat: Number, lng: Number, setdate: String, sethour:String, details: String) {
    const headers = new HttpHeaders({
        'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.post(this.env.API_URL + 'create-postulation',
      {category: category, address: address, int_number: int_number, references: references, lat: lat, lng: lng, setdate: setdate, sethour:sethour, details: details}, { headers: headers });
  }

  deleteCard(card_id: String) {
    const headers = new HttpHeaders({
        'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.post(this.env.API_URL + 'payments/deletecard',
      {card_id: card_id}, { headers: headers });
  }

  getCard() {
    const headers = new HttpHeaders({
        'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.get<any[]>(this.env.API_URL + 'payments/getcards',
      { headers: headers });
  }

  getPostulation() {
    const headers = new HttpHeaders({
        'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.get<any[]>(this.env.API_URL + 'get-postulations',
      { headers: headers });
  }

  getContractedPostulation() {
    const headers = new HttpHeaders({
        'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.get<any[]>(this.env.API_URL + 'get-contracted-postulations',
      { headers: headers });
  }

  getFinishedPostulation() {
    const headers = new HttpHeaders({
        'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.get<any[]>(this.env.API_URL + 'get-finished-postulations',
      { headers: headers });
  }

  getPendingcontracts() {
    const headers = new HttpHeaders({
        'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.get<any[]>(this.env.API_URL + 'contracts/pending',
      { headers: headers });
  }

  getCurrentcontracts() {
    const headers = new HttpHeaders({
        'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.get<any[]>(this.env.API_URL + 'contracts/current',
      { headers: headers });
  }

  getFinishedcontracts() {
    const headers = new HttpHeaders({
        'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.get<any[]>(this.env.API_URL + 'contracts/finished',
      { headers: headers });
  }

  setPostulation(postulation_id: String) {
    const headers = new HttpHeaders({
        'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.post(this.env.API_URL + 'postulate',
      {postulation_id: postulation_id}, { headers: headers });
  }

  getPostulants(postulation_id: String) {
    const headers = new HttpHeaders({
      'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.get<any[]>(this.env.API_URL + 'get-postulants' + '?postulation_id=' + postulation_id,
      { headers: headers });
  }

  checkCoupon(postulation_id: String, supplier_id: String, coupon: String) {
    const headers = new HttpHeaders({
        'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.post(this.env.API_URL + 'contracts/coupon',
      { postulation_id: postulation_id, supplier_id: supplier_id, coupon: coupon}, { headers: headers });
  }

  createContract(postulation_id: String, supplier_id: String, card_id: String, coupon: String, code: String, device_id: String) {
    const headers = new HttpHeaders({
        'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.post(this.env.API_URL + 'contracts/create',
      { postulation_id: postulation_id, supplier_id: supplier_id, card_id: card_id, coupon: coupon, code: code, device_id: device_id }, { headers: headers });
  }

  cancelContract(contract_id: String) {
    const headers = new HttpHeaders({
        'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.post(this.env.API_URL + 'contracts/cancel',
      { contract_id: contract_id }, { headers: headers });
  }
  startContract(contract_pin: Number) {
    const headers = new HttpHeaders({
        'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.post(this.env.API_URL + 'contracts/start',
      { contract_pin: contract_pin }, { headers: headers });
  }

  reviewContract(contract_id: Number, rate: Number, comment: String) {
    const headers = new HttpHeaders({
        'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.post(this.env.API_URL + 'contracts/review',
      { contract_id: contract_id, rate: rate, comment: comment }, { headers: headers });
  }

  reportContract(contract_id: Number, comment: String) {
    const headers = new HttpHeaders({
        'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.post(this.env.API_URL + 'contracts/report',
      { contract_id: contract_id, comment: comment }, { headers: headers });
  }

  getReports() {
    const headers = new HttpHeaders({
      'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.get<any[]>(this.env.API_URL + 'contracts/reports', { headers: headers });
  }

  getPostulationReports() {
    const headers = new HttpHeaders({
      'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.get<any[]>(this.env.API_URL + 'postulations/reports', { headers: headers });
  }

  getReportDiscussion(reportId: any) {
    const headers = new HttpHeaders({
      'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.get<any[]>(this.env.API_URL + 'contracts/reports/' + reportId + '/comments', { headers });
  }

  sendReportMessage(reportId: any, comment: string) {
    const headers = new HttpHeaders({
      'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.post<any>(this.env.API_URL + 'contracts/reports/' + reportId + '/comments', { comment: comment }, { headers });
  }

  noHomeCheck() {
    const headers = new HttpHeaders({
      'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.get<any[]>(this.env.API_URL + 'contracts/nohome-check',
      { headers: headers });
  }

  noHomeConfirm(contract_id: String, lat: Number, lng: Number, description: String) {
    const headers = new HttpHeaders({
        'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.post(this.env.API_URL + 'contracts/nohome-confirm',
      { contract_id: contract_id, lat: lat, lng: lng, description: description }, { headers: headers });
  }

  addExtra(contract_id: Number, amount: Number, card_id: String, code: String, device_id: String) {
    const headers = new HttpHeaders({
        'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.post(this.env.API_URL + 'contracts/extra',
      { contract_id: contract_id, amount: amount, card_id: card_id, code: code, device_id: device_id }, { headers: headers });
  }

  addHero(name: String, rfc: String, categories: String, tags: String, address: String, lat: Number, lng: Number, bank: Number, bank_account: Number, fee: Number, reference_options: Number, reference: String) {
    const headers = new HttpHeaders({
        'Authorization': this.authService.token["token_type"]+" "+this.authService.token["access_token"]
    });
    return this.http.post(this.env.API_URL + 'add-hero',
      {name: name, rfc: rfc, categories: categories, tags: tags, address: address, lat: lat, lng: lng, bank: bank, bank_account: bank_account, fee: fee, reference_options: reference_options, reference: reference}, { headers: headers });
  }
}
