import apiClient from "@/infrastructure/apiClient";
import apiPath from "@/infrastructure/apiPath";

export default {
  /**
   * Tìm kiếm CallLog với các tham số lọc
   * @param {Object} searchModel - Model tìm kiếm
   * @returns {Promise<Object>} Kết quả tìm kiếm
   */
  async search(searchModel) {
    const params = JSON.parse(JSON.stringify(searchModel));

    var searchResult = await apiClient
      .post(apiPath.callLog.search, params)
      .then((r) => {
        return r.data;
      })
      .catch((e) => {
        console.log(e);
        return {};
      });
    return searchResult;
  },

  /**
   * Lấy CallLog theo ID
   * @param {number} id - ID của CallLog
   * @returns {Promise<Object>} Thông tin CallLog
   */
  async getById(id) {
    var result = await apiClient
      .get(apiPath.callLog.getById + id)
      .then((r) => {
        return r.data;
      })
      .catch((e) => {
        console.log(e);
        return {};
      });
    return result;
  },


  /**
   * Cập nhật trạng thái Lead của CallLog
   * @param {number} id - ID của CallLog
   * @param {Object} statusModel - Model cập nhật trạng thái
   * @returns {Promise<Object>} Kết quả cập nhật
   */
  async updateLeadStatus(id, statusModel) {
    const params = JSON.parse(JSON.stringify(statusModel));
    var result = await apiClient
      .put(apiPath.callLog.updateLeadStatus + id, params)
      .then((r) => {
        return r.data;
      })
      .catch((e) => {
        console.log(e);
        return {};
      });
    return result;
  },

  /**
   * Lấy CallLog theo số điện thoại
   * @param {string} phoneNumber - Số điện thoại
   * @returns {Promise<Object>} Danh sách CallLog
   */
  async getByPhoneNumber(phoneNumber) {
    var result = await apiClient
      .get(apiPath.callLog.getByPhoneNumber + phoneNumber)
      .then((r) => {
        return r.data;
      })
      .catch((e) => {
        console.log(e);
        return {};
      });
    return result;
  },

  /**
   * Lấy thống kê CallLog
   * @param {string} startDate - Ngày bắt đầu (optional)
   * @param {string} endDate - Ngày kết thúc (optional)
   * @returns {Promise<Object>} Thống kê CallLog
   */
  async getStatistics(startDate = null, endDate = null) {
    let url = apiPath.callLog.statistics;
    const params = new URLSearchParams();
    
    if (startDate) {
      params.append('startDate', startDate);
    }
    if (endDate) {
      params.append('endDate', endDate);
    }
    
    if (params.toString()) {
      url += '?' + params.toString();
    }

    var result = await apiClient
      .get(url)
      .then((r) => {
        return r.data;
      })
      .catch((e) => {
        console.log(e);
        return {};
      });
    return result;
  },

  /**
   * Lấy danh sách trạng thái Lead
   * @returns {Array} Danh sách trạng thái
   */
  getLeadStatusOptions() {
    return [
      { value: 1, label: "Tạo mới", color: "blue" },
      { value: 2, label: "Đã tiếp nhận", color: "orange" },
      { value: 3, label: "Thành công", color: "green" },
      { value: 4, label: "Thất bại", color: "red" }
    ];
  },

  /**
   * Lấy danh sách loại cuộc gọi
   * @returns {Array} Danh sách loại cuộc gọi
   */
  getCallTypeOptions() {
    return [
      { value: "Inbound", label: "Cuộc gọi đến" },
      { value: "Outbound", label: "Cuộc gọi đi" }
    ];
  },

  /**
   * Format thời gian hiển thị
   * @param {string} duration - Thời gian dạng HH:mm:ss
   * @returns {string} Thời gian đã format
   */
  formatDuration(duration) {
    if (!duration) return "00:00:00";
    return duration;
  },

  /**
   * Format số tiền hiển thị
   * @param {number} amount - Số tiền
   * @returns {string} Số tiền đã format
   */
  formatCurrency(amount) {
    if (!amount) return "0 VNĐ";
    return new Intl.NumberFormat('vi-VN', {
      style: 'currency',
      currency: 'VND'
    }).format(amount);
  }
};
