/**
 * Tax Invoice Service
 * Service để quản lý hóa đơn thuế cho phiếu đối soát
 */

import apiClient from '@/infrastructure/apiClient'
import { taxInvoice } from '@/infrastructure/taxPath'

export default {
    /**
     * Tạo hóa đơn thuế mới cho phiếu đối soát
     * @param {Object} model - CreateTaxInvoiceModel
     * @param {number} model.CustomerReconciliationSlipId - ID phiếu đối soát (required)
     * @param {number} model.VatInfoId - ID thông tin VAT (required)
     * @param {string} model.Note - Ghi chú (optional, max 2048 chars)
     * @returns {Promise<Object>} { Result, Message, TaxInvoiceId, Status, StatusName }
     */
    async createTaxInvoice(model) {
        try {
            const response = await apiClient.post(taxInvoice.create, model)
            return response.data
        } catch (error) {
            console.error('Error creating tax invoice:', error)
            throw error
        }
    },

    /**
     * Cập nhật trạng thái hóa đơn thuế (với upload file PDF)
     * @param {FormData} formData - Form data chứa:
     *   - TaxInvoiceId: number (required)
     *   - Status: number (required, 2=Draft, 3=Issued)
     *   - InvoiceNumber: string (required when status=2 or 3)
     *   - InvoiceDate: DateTimeOffset (required when status=2 or 3)
     *   - files: File[] (required when status=2 or 3, PDF only)
     * @returns {Promise<Object>} { Result, Message, TaxInvoiceId, InvoiceNumber, Status, StatusName }
     */
    async updateTaxInvoiceStatus(formData) {
        try {
            const response = await apiClient.post(taxInvoice.updateStatus, formData, {
                headers: {
                    'Content-Type': 'multipart/form-data'
                }
            })
            return response.data
        } catch (error) {
            console.error('Error updating tax invoice status:', error)
            throw error
        }
    },

    /**
     * Lấy thông tin hóa đơn thuế theo ID
     * @param {number} id - ID hóa đơn thuế
     * @returns {Promise<Object>} TaxInvoiceItem
     */
    async getTaxInvoiceById(id) {
        try {
            const response = await apiClient.get(`${taxInvoice.getById}${id}`)
            return response.data
        } catch (error) {
            console.error('Error getting tax invoice by ID:', error)
            throw error
        }
    },

    /**
     * Lấy thông tin hóa đơn thuế theo ID phiếu đối soát
     * @param {number} slipId - ID phiếu đối soát
     * @returns {Promise<Object|null>} TaxInvoiceItem hoặc null nếu chưa có hóa đơn
     */
    async getTaxInvoiceBySlipId(slipId) {
        try {
            const response = await apiClient.get(`${taxInvoice.getBySlipId}${slipId}`)
            // API trả về null nếu không tìm thấy
            return response.data
        } catch (error) {
            console.error('Error getting tax invoice by slip ID:', error)
            throw error
        }
    },

    /**
     * Xóa hóa đơn thuế (chỉ được phép khi status = NotIssued)
     * @param {number} id - ID hóa đơn thuế
     * @returns {Promise<Object>} { Message }
     */
    async deleteTaxInvoice(id) {
        try {
            const response = await apiClient.delete(`${taxInvoice.delete}${id}`)
            return response.data
        } catch (error) {
            console.error('Error deleting tax invoice:', error)
            throw error
        }
    }
}
