import apiClient from "@/infrastructure/apiClient";

const baseURL = import.meta.env.VITE_API_BASE_URL;

const myBankAccountService = {
  /**
   * Lấy tất cả tài khoản ngân hàng của tôi
   * @returns {Promise<Array>} Danh sách tài khoản ngân hàng
   */
  async getAll() {
    try {
      const response = await apiClient.get(`${baseURL}/MyBankAccount/GetAll`);
      return response.data;
    } catch (error) {
      console.error("Error getting my bank accounts:", error);
      return [];
    }
  },

  /**
   * Tìm kiếm tài khoản ngân hàng của tôi với phân trang
   * @param {Object} searchModel - Model tìm kiếm
   * @returns {Promise<Object>} Kết quả tìm kiếm
   */
  async search(searchModel) {
    try {
      const params = JSON.parse(JSON.stringify(searchModel));
      const response = await apiClient.post(`${baseURL}/MyBankAccount/Search`, params);
      return response.data;
    } catch (error) {
      console.error("Error searching my bank accounts:", error);
      return { Items: [], TotalCount: 0, Pagination: { Page: 1, PageSize: 20, TotalPages: 0 } };
    }
  },

  /**
   * Lấy thông tin tài khoản ngân hàng theo ID
   * @param {number} id - ID của tài khoản ngân hàng
   * @returns {Promise<Object|null>} Thông tin tài khoản ngân hàng
   */
  async getById(id) {
    try {
      const response = await apiClient.get(`${baseURL}/MyBankAccount/${id}`);
      return response.data;
    } catch (error) {
      console.error("Error getting my bank account by ID:", error);
      return null;
    }
  },

  /**
   * Tạo mới hoặc cập nhật tài khoản ngân hàng
   * @param {Object} bankAccountModel - Dữ liệu tài khoản ngân hàng
   * @returns {Promise<Object>} Kết quả tạo mới/cập nhật
   */
  async createOrUpdate(bankAccountModel) {
    try {
      const params = JSON.parse(JSON.stringify(bankAccountModel));
      const response = await apiClient.post(`${baseURL}/MyBankAccount/CreateOrUpdate`, params);
      return response.data;
    } catch (error) {
      console.error("Error creating/updating my bank account:", error);
      return { Result: 2, Message: "Có lỗi xảy ra khi tạo/cập nhật tài khoản ngân hàng" };
    }
  },

  /**
   * Xóa tài khoản ngân hàng
   * @param {number} id - ID của tài khoản ngân hàng
   * @returns {Promise<Object>} Kết quả xóa
   */
  async delete(id) {
    try {
      const response = await apiClient.delete(`${baseURL}/MyBankAccount/${id}`);
      return response.data;
    } catch (error) {
      console.error("Error deleting my bank account:", error);
      return { Result: 2, Message: "Có lỗi xảy ra khi xóa tài khoản ngân hàng" };
    }
  },

  /**
   * Tạo model tìm kiếm mặc định
   * @returns {Object} Model tìm kiếm mặc định
   */
  createDefaultSearchModel() {
    return {
      Pagination: {
        Page: 1,
        PageSize: 20
      },
      Search: {
        PredicateObject: {
          Keyword: "",
          IsDefault: null
        }
      },
      Sort: {
        Predicate: "CreatedTime",
        Reverse: true
      },
      IsExport: false
    };
  },

  /**
   * Tạo model tài khoản ngân hàng mặc định
   * @returns {Object} Model tài khoản ngân hàng mặc định
   */
  createDefaultBankAccountModel() {
    return {
      Id: 0,
      AccountNumber: "",
      AccountHolderName: "",
      BankId: null,
      IsDefault: false,
      Note: ""
    };
  }
};

export default myBankAccountService;
