/* File: assets/js/script.js */
/**
 * Fungsi inisialisasi umum aplikasi
 */
document.addEventListener('DOMContentLoaded', function() {
    // Inisialisasi tooltip
    const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
    tooltipTriggerList.map(function (tooltipTriggerEl) {
        return new bootstrap.Tooltip(tooltipTriggerEl);
    });

    // Inisialisasi popover
    const popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'));
    popoverTriggerList.map(function (popoverTriggerEl) {
        return new bootstrap.Popover(popoverTriggerEl);
    });

    // Auto close alerts setelah 5 detik
    const alerts = document.querySelectorAll('.alert');
    alerts.forEach(alert => {
        setTimeout(() => {
            bootstrap.Alert.getInstance(alert).close();
        }, 5000);
    });

    // Handle form submission dengan konfirmasi
    const confirmForms = document.querySelectorAll('form.confirm-submit');
    confirmForms.forEach(form => {
        form.addEventListener('submit', function(e) {
            e.preventDefault();
            const form = this;
            
            Swal.fire({
                title: 'Apakah Anda yakin?',
                text: "Anda tidak dapat mengembalikan aksi ini!",
                icon: 'warning',
                showCancelButton: true,
                confirmButtonColor: '#3085d6',
                cancelButtonColor: '#d33',
                confirmButtonText: 'Ya, lanjutkan!',
                cancelButtonText: 'Batal'
            }).then((result) => {
                if (result.isConfirmed) {
                    form.submit();
                }
            });
        });
    });

    // Inisialisasi Select2 untuk semua elemen select
    $('.select2').select2({
        theme: 'bootstrap-5',
        width: '100%',
        placeholder: 'Pilih opsi',
        allowClear: true
    });

    // Typeahead functionality untuk select2
    $('.select2-search').select2({
        theme: 'bootstrap-5',
        width: '100%',
        placeholder: 'Ketikan untuk mencari...',
        minimumInputLength: 1,
        ajax: {
            url: '/api/search',
            dataType: 'json',
            delay: 250,
            data: function (params) {
                return {
                    q: params.term,
                    page: params.page
                };
            },
            processResults: function (data) {
                return {
                    results: data.items
                };
            },
            cache: true
        }
    });
});

/**
 * Fungsi untuk menampilkan toast notification
 */
function showToast(icon, title, text) {
    const Toast = Swal.mixin({
        toast: true,
        position: 'top-end',
        showConfirmButton: false,
        timer: 3000,
        timerProgressBar: true,
        didOpen: (toast) => {
            toast.addEventListener('mouseenter', Swal.stopTimer);
            toast.addEventListener('mouseleave', Swal.resumeTimer);
        }
    });
    
    Toast.fire({
        icon: icon,
        title: title,
        text: text
    });
}

/**
 * Fungsi untuk handle error AJAX
 */
function handleAjaxError(xhr, status, error) {
    let errorMessage = 'Terjadi kesalahan. Silakan coba lagi.';
    
    if (xhr.responseJSON && xhr.responseJSON.message) {
        errorMessage = xhr.responseJSON.message;
    } else if (xhr.status === 0) {
        errorMessage = 'Tidak dapat terhubung ke server. Periksa koneksi internet Anda.';
    } else if (xhr.status === 404) {
        errorMessage = 'Halaman yang diminta tidak ditemukan. [404]';
    } else if (xhr.status === 500) {
        errorMessage = 'Terjadi kesalahan internal server. [500]';
    }
    
    Swal.fire({
        icon: 'error',
        title: 'Error',
        text: errorMessage
    });
}

/**
 * Fungsi untuk memformat angka
 */
function formatNumber(num) {
    return new Intl.NumberFormat('id-ID').format(num);
}