import { requestJson } from './apiClient';

function normalizeItems(items) {
    if (Array.isArray(items)) return items;
    if (items && typeof items === 'object') return [items];
    return [];
}

export const OrderService = {
    async listOrders({
        page,
        limit,
        id,
        tenant_id,
        tenant_code,
        tenant_name,
        user_id,
        username,
        content_id,
        content_title,
        type,
        status,
        created_at_from,
        created_at_to,
        paid_at_from,
        paid_at_to,
        amount_paid_min,
        amount_paid_max,
        sortField,
        sortOrder
    } = {}) {
        const iso = (d) => {
            if (!d) return undefined;
            const date = d instanceof Date ? d : new Date(d);
            if (Number.isNaN(date.getTime())) return undefined;
            return date.toISOString();
        };

        const query = {
            page,
            limit,
            id,
            tenant_id,
            tenant_code,
            tenant_name,
            user_id,
            username,
            content_id,
            content_title,
            type,
            status,
            created_at_from: iso(created_at_from),
            created_at_to: iso(created_at_to),
            paid_at_from: iso(paid_at_from),
            paid_at_to: iso(paid_at_to),
            amount_paid_min,
            amount_paid_max
        };
        if (sortField && sortOrder) {
            if (sortOrder === 1) query.asc = sortField;
            if (sortOrder === -1) query.desc = sortField;
        }

        const data = await requestJson('/super/v1/orders', { query });
        return {
            page: data?.page ?? page ?? 1,
            limit: data?.limit ?? limit ?? 10,
            total: data?.total ?? 0,
            items: normalizeItems(data?.items)
        };
    },
    async getOrderStatistics() {
        return requestJson('/super/v1/orders/statistics');
    },
    async getOrderDetail(orderID) {
        if (!orderID) throw new Error('orderID is required');
        return requestJson(`/super/v1/orders/${orderID}`);
    },
    async refundOrder(orderID, { force, reason, idempotency_key } = {}) {
        if (!orderID) throw new Error('orderID is required');
        return requestJson(`/super/v1/orders/${orderID}/refund`, {
            method: 'POST',
            body: {
                force: Boolean(force),
                reason,
                idempotency_key
            }
        });
    }
};
