// business-improvement-plugin.js

jQuery(document).ready(function($) {
    // チャットウィンドウのスクロールを常に下に
    function scrollChatToBottom() {
        $('#chat-window').scrollTop($('#chat-window')[0].scrollHeight);
    }

    // バリデーション関数
    function validateForm() {
        let isValid = true;

        // 各フィールドの値をチェック
        const currentChallenge = $('#current_challenge').val().trim();
        const proposalContent = $('#proposal_content').val().trim();
        const expectedEffect = $('#expected_effect').val().trim();
        const requiredResources = $('#required_resources').val().trim();
        const additionalComments = $('#additional_comments').val().trim();

        // エラーメッセージの初期化
        $('.error-message').text('');

        // バリデーションチェック
        if (!currentChallenge) {
            $('#error_current_challenge').text('未入力です');
            isValid = false;
        }
        if (!proposalContent) {
            $('#error_proposal_content').text('未入力です');
            isValid = false;
        }
        if (!expectedEffect) {
            $('#error_expected_effect').text('未入力です');
            isValid = false;
        }
        if (!requiredResources) {
            $('#error_required_resources').text('未入力です');
            isValid = false;
        }

        return isValid;
    }

    // フォーム送信処理
    window.submitImprovementForm = function() {
        // バリデーション実行
        if (!validateForm()) {
            return; // バリデーションが通らなければ送信を中止
        }

        var formData = {
            action: 'process_improvement_form',
            current_challenge: $('#current_challenge').val().trim(),
            proposal_content: $('#proposal_content').val().trim(),
            expected_effect: $('#expected_effect').val().trim(),
            required_resources: $('#required_resources').val().trim(),
            additional_comments: $('#additional_comments').val().trim(),
            security: improvement_ajax.nonce // 必要に応じてnonceを追加
        };

        console.log("送信するフォームデータ:", formData); // デバッグ用

        // スピナーを表示
        $('#loading-spinner').show();
        $('#improvement-response').hide();
        $('#ppt-button').hide();

        $.post(improvement_ajax.ajax_url, formData)
            .done(function(response) {
                // スピナーを非表示
                $('#loading-spinner').hide();

                if (response.success) {
                    // 結果を表示
                    $('#improvement-response').html(response.data.replace(/\n/g, '<br>')).show();
                    // PPT出力ボタンを表示
                    $('#ppt-button').show();
                } else {
                    // エラーメッセージを表示
                    $('#improvement-response').html('<span class="error-message">' + response.data + '</span>').show();
                }
            })
            .fail(function(jqXHR, textStatus, errorThrown) {
                // スピナーを非表示
                $('#loading-spinner').hide();

                console.error('リクエストエラー: ' + textStatus + ': ' + errorThrown);
                console.error(jqXHR.responseText); // サーバーからの詳細なエラーメッセージを表示
                alert('リクエストエラー: ' + textStatus + ': ' + errorThrown); // リクエストエラーを表示
            });
    };

    // PPT出力をリクエストする関数
    window.downloadPPT = function() {
        console.log("PPT出力リクエストを開始");

        var formData = {
            action: 'generate_ppt'
        };

        $.post(improvement_ajax.ajax_url, formData)
            .done(function(response) {
                if(response.success) {
                    console.log("PPT生成に成功");
                    window.open(response.data, '_blank'); // PPTのダウンロードリンクを別タブで開く
                } else {
                    console.error('PPT生成エラー: ' + response.data);
                    alert('PPTの生成に失敗しました: ' + response.data); // エラーメッセージを表示
                }
            })
            .fail(function(jqXHR, textStatus, errorThrown) {
                console.error('リクエストエラー: ' + textStatus + ': ' + errorThrown);
                console.error(jqXHR.responseText); // サーバーからの詳細なエラーメッセージを表示
                alert('リクエストエラー: ' + textStatus + ': ' + errorThrown); // リクエストエラーを表示
            });
    };

    // チャットメッセージ送信処理
    window.sendChatMessage = function() {
        var message = $('#chat-input').val().trim();
        if (message === "") {
            alert('メッセージを入力してください。');
            return;
        }

        // メッセージをチャットウィンドウに表示
        var chatMessages = $('#chat-messages');
        var userMessageDiv = $('<div>').addClass('user-message').text("あなた: " + message);
        chatMessages.append(userMessageDiv);
        scrollChatToBottom();

        // 入力フィールドをクリア
        $('#chat-input').val('');

        // スピナーを表示
        var spinner = $('<div>').addClass('spinner');
        chatMessages.append(spinner);
        scrollChatToBottom();

        // AJAXリクエストを送信
        var formData = {
            action: 'process_chat_message',
            message: message
        };

        $.post(improvement_ajax.ajax_url, formData)
            .done(function(response) {
                // スピナーを非表示
                spinner.remove();

                if(response.success) {
                    var botMessageDiv = $('<div>').addClass('bot-message').text("サポート: " + response.data);
                    chatMessages.append(botMessageDiv);
                } else {
                    var errorDiv = $('<div>').addClass('bot-message').text("サポート: エラーが発生しました。");
                    chatMessages.append(errorDiv);
                }
                scrollChatToBottom();
            })
            .fail(function() {
                // スピナーを非表示
                spinner.remove();

                var errorDiv = $('<div>').addClass('bot-message').text("サポート: リクエストに失敗しました。");
                chatMessages.append(errorDiv);
                scrollChatToBottom();
            });
    };
});
