/**
 * Site JavaScript - Các tiện ích chung cho website
 * Sử dụng với server-side authentication (Session)
 */

const Site = {
    /**
     * Hiển thị loading overlay
     */
    showLoading: function () {
        if ($('#loading-overlay').length === 0) {
            $('body').append('<div id="loading-overlay" style="position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.5);z-index:9999;display:flex;align-items:center;justify-content:center;"><div class="spinner-border text-light" role="status"></div></div>');
        }
        $('#loading-overlay').show();
    },

    /**
     * Ẩn loading overlay
     */
    hideLoading: function () {
        $('#loading-overlay').hide();
    },

    /**
     * Hiển thị thông báo thành công
     */
    showSuccess: function (message) {
        if (typeof Swal !== 'undefined') {
            Swal.fire({
                icon: 'success',
                title: 'Thành công',
                text: message,
                timer: 2000,
                showConfirmButton: false
            });
        }
    },

    /**
     * Hiển thị thông báo lỗi
     */
    showError: function (message) {
        if (typeof Swal !== 'undefined') {
            Swal.fire({
                icon: 'error',
                title: 'Lỗi',
                text: message
            });
        }
    },

    /**
     * Format số với dấu phẩy và tối đa 3 chữ số thập phân
     */
    formatNumber: function (num) {
        if (num === null || num === undefined) return '0';
        return Number(num).toLocaleString('en-US', { maximumFractionDigits: 3 });
    },

    /**
     * Format ngày tháng
     */
    formatDate: function (dateStr) {
        if (!dateStr) return '';
        var date = new Date(dateStr);
        return date.toLocaleDateString('vi-VN');
    },

    /**
     * Format ngày giờ
     */
    formatDateTime: function (dateStr) {
        if (!dateStr) return '';
        var date = new Date(dateStr);
        return date.toLocaleString('vi-VN');
    }
};

/**
 * API Helper - Gọi các endpoint trong HomeController
 * Server-side sẽ xử lý authentication qua Session
 */
const API = {
    /**
     * POST request chung
     */
    post: function (url, data, successCallback, errorCallback) {
        Site.showLoading();

        $.ajax({
            url: url,
            type: 'POST',
            contentType: 'application/json',
            data: JSON.stringify(data || {}),
            success: function (response) {
                Site.hideLoading();

                if (response.errorCode === '0' || response.errorCode === 0) {
                    if (typeof successCallback === 'function') {
                        successCallback(response);
                    }
                } else {
                    if (typeof errorCallback === 'function') {
                        errorCallback(response);
                    } else {
                        Site.showError(response.message || 'Có lỗi xảy ra');
                    }
                }
            },
            error: function (xhr, status, error) {
                Site.hideLoading();
                console.error('API error:', error);
                if (typeof errorCallback === 'function') {
                    errorCallback({ errorCode: '-999', message: 'Lỗi kết nối' });
                } else {
                    Site.showError('Không thể kết nối đến server');
                }
            }
        });
    },

    /**
     * Refresh thông tin user
     */
    refreshProfile: function (callback) {
        this.post('/Home/RefreshProfile', {}, callback);
    },

    /**
     * Đăng xuất
     */
    logout: function (callback) {
        this.post('/Home/DoLogout', {}, function (response) {
            if (typeof callback === 'function') {
                callback(response);
            }
            // Redirect về trang chủ
            window.location.href = '/';
        });
    },

    /**
     * Lấy lịch sử chơi game
     */
    getPlayHistory: function (fromDate, toDate, page, pageSize, callback) {
        this.post('/Home/GetPlayHistory', {
            fromDate: fromDate,
            toDate: toDate,
            page: page || 1,
            pageSize: pageSize || 10
        }, callback);
    },

    /**
     * Lấy lịch sử ranking
     */
    getRankingHistory: function (rankType, fromDate, toDate, page, pageSize, callback) {
        this.post('/Home/GetRankingHistory', {
            rankType: rankType,
            fromDate: fromDate,
            toDate: toDate,
            page: page || 1,
            pageSize: pageSize || 10
        }, callback);
    },

    /**
     * Lấy danh sách gói Exchange
     */
    getExchangeConfigs: function (callback) {
        this.post('/Home/GetExchangeConfigs', {}, callback);
    },

    /**
     * Request OTP cho Exchange
     */
    requestExchangeOtp: function (configId, callback, errorCallback) {
        this.post('/Home/RequestExchangeOtp', { configId: configId }, callback, errorCallback);
    },

    /**
     * Verify OTP
     */
    verifyExchangeOtp: function (otpCode, callback, errorCallback) {
        this.post('/Home/VerifyExchangeOtp', { otpCode: otpCode }, callback, errorCallback);
    },

    /**
     * Resend OTP
     */
    resendExchangeOtp: function (callback, errorCallback) {
        this.post('/Home/ResendExchangeOtp', {}, callback, errorCallback);
    }
};

// Document ready
$(document).ready(function () {
    console.log('Site initialized');
});
