/**
 * Premise Scoring Service
 * Service quản lý tiêu chí chấm điểm mặt bằng
 */

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

export default {
    /**
     * Tìm kiếm tiêu chí chấm điểm
     * @param {Object} searchModel - { Pagination, Sort, Search }
     * @returns {Promise<Object>} { TotalRecord, Data }
     */
    async search(searchModel) {
        try {
            const response = await apiClient.post(apiPath.premiseScoring.search, searchModel);
            return response.data;
        } catch (error) {
            console.error('Error searching scoring criteria:', error);
            throw error;
        }
    },

    /**
     * Lấy chi tiết tiêu chí theo ID
     * @param {number} id - ID tiêu chí
     * @returns {Promise<Object>} Scoring criteria detail
     */
    async getById(id) {
        try {
            const response = await apiClient.get(`${apiPath.premiseScoring.getById}${id}`);
            return response.data;
        } catch (error) {
            console.error('Error getting scoring criteria by id:', error);
            throw error;
        }
    },

    /**
     * Tạo mới hoặc cập nhật tiêu chí
     * Id = 0: tạo mới, Id > 0: cập nhật
     * @param {Object} model - Scoring criteria model
     * @returns {Promise<Object>} { Result, Message }
     */
    async createOrUpdate(model) {
        try {
            const response = await apiClient.post(apiPath.premiseScoring.createOrUpdate, model);
            return response.data;
        } catch (error) {
            console.error('Error creating/updating scoring criteria:', error);
            throw error;
        }
    },

    /**
     * Xóa tiêu chí
     * @param {number} id - ID tiêu chí
     * @returns {Promise<Object>} { Result, Message }
     */
    async delete(id) {
        try {
            const response = await apiClient.delete(`${apiPath.premiseScoring.delete}${id}`);
            return response.data;
        } catch (error) {
            console.error('Error deleting scoring criteria:', error);
            throw error;
        }
    },

    /**
     * Lấy tất cả tiêu chí đang active (dùng cho form chấm điểm)
     * @returns {Promise<Array>} Danh sách tiêu chí active kèm options
     */
    async getAllActive() {
        try {
            const response = await apiClient.get(apiPath.premiseScoring.getAllActive);
            return response.data;
        } catch (error) {
            console.error('Error getting all active criteria:', error);
            throw error;
        }
    },
};
