import { Injectable } from "@nestjs/common";
import { DataSource } from "typeorm";
import axios from "axios";

@Injectable()
export class AppointmentStatusService {
  constructor(
    private readonly connection: DataSource
  ) { }

  async findAll(appointment_id: any) {
    if (appointment_id) {
      try {
        let numb;
        try {
          numb = appointment_id.replace(/[a-zA-Z]/g, "");
        } catch (err) {
          numb = appointment_id;
        }
        const [hospital_id] = await this.connection.query(
          `select Hospital_id from appointment where id = ?`,
          [numb]
        );
        const [base_url] = await this.connection.query(
          `select phr_api_base_url from hospitals where plenome_id = ?`,
          [hospital_id.Hospital_id]
        );
        console.log(base_url, "base_url");

        const result = await axios.get(
          `${base_url.phr_api_base_url}/phr-appointment-status?appointment_id=${numb}`
        );

        return result.data;
      } catch (error) {
        console.log(error, "error");

        return error;
      }
    } else {
      return {
        status: process.env.FAILED_STATUS_ABHA_ADDRESS_MAPPING,
        message: process.env.APPT_STATUS_APPT_ID_MISSING_ERROR,
      };
    }
  }

  async appointment_status_tracking(appointment_id: string) {

    if (appointment_id) {
      try {
        const [hospital_id] = await this.connection.query(
          `select Hospital_id from appointment where id = ?`,
          [appointment_id]
        );
        const [base_url] = await this.connection.query(
          `select phr_api_base_url from hospitals where plenome_id = ?`,
          [hospital_id.Hospital_id]
        );
        console.log(base_url, "base_url");

        const result = await axios.get(
          `${base_url.phr_api_base_url}/phr-appointment-status/tracking?appointment_id=${appointment_id}`
        );

        return result.data;
      } catch (error) {
        return error;
      }
    } else {
      return {
        status: process.env.FAILED_STATUS_ABHA_ADDRESS_MAPPING,
        message: process.env.APPT_STATUS_APPT_ID_MISSING_ERROR,
      };
    }
  }

  async findAllForTracking(hospital_id: number) {
    if (hospital_id) {
      try {
        const [base_url] = await this.connection.query(
          `select phr_api_base_url from hospitals where plenome_id = ?`,
          [hospital_id]
        );

        const result = await axios.get(
          `${base_url.phr_api_base_url}/phr-appointment-status/statusList?hospital_id=${hospital_id}`
        );

        return result.data;
      } catch (error) {
        return error;
      }
    } else {
      return {
        status: process.env.FAILED_STATUS_ABHA_ADDRESS_MAPPING,
        message: process.env.APPT_STATUS_APPT_ID_MISSING_ERROR,
      };
    }
  }
}
