"use strict";
// SPDX-License-Identifier: GPL-3.0-or-later
// myMPD (c) 2018-2026 Juergen Mang <mail@jcgames.de>
// https://github.com/jcorporation/mympd

/** @module modalPlaylistAddTo_js */

/**
 * Initializes the playlist elements
 * @returns {void}
 */
function initModalPlaylistAddTo() {
    setDataId('modalPlaylistAddToPlistInput', 'cb-filter', 'filterPlaylistsSelect');
    setDataId('modalPlaylistAddToPlistInput', 'cb-filter-options', [1, 'modalPlaylistAddToPlistInput']);
}

/**
 * Shows the add to playlist modal
 * @param {string} type one off album, disc, search, song, stream, searchdir
 * @param {Array} entities entities to add
 * @param {Array} [entityNames] entity names to add (only for display)
 * @returns {void}
 */
function showAddToPlaylist(type, entities, entityNames) {
    cleanupModalId('modalPlaylistAddTo');
    setDataId('modalPlaylistAddToUrisInput', 'type', type);
    setDataId('modalPlaylistAddToUrisInput', 'entities', entities);
    elGetById('modalPlaylistAddToPlistInput').value = '';
    elGetById('modalPlaylistAddToPlistInput').filterInput.value = '';
    elGetById('modalPlaylistAddToPosAppend').checked = 'checked';
    elGetById('modalPlaylistAddToUrisInput').value = '';
    if (entities.length === 0) {
        // manual add a stream
        toggleAddToPlaylistFrm(elGetById('modalPlaylistAddToQueueBtn'));
        elShowId('modalPlaylistAddToAddStreamFrm');
        elHideId('modalPlaylistAddToSrcRow');
        elGetById('addToPlaylistCaption').textContent = tn('Add stream');
    }
    else {
        // add to playlist
        toggleAddToPlaylistFrm(elGetById('modalPlaylistAddToPlaylistBtn'));
        elHideId('modalPlaylistAddToAddStreamFrm');
        elShowId('modalPlaylistAddToSrcRow');
        const names = [];
        if (entityNames !== undefined &&
            entityNames.length > 0)
        {
            names.push(... entityNames);
        }
        else if (type === 'searchdir') {
            names.push(tn('Path') + ': ' + entities[0]);
            if (entities[1] !== '') {
                names.push(tn('Search') + ': ' + entities[1]);
            }
        }
        else if (type === 'search') {
            names.push(tn('Search') + ': ' + entities[0]);
        }
        else {
            for (const entity of entities) {
                names.push(basename(entity, true));
            }
        }
        populateEntities('modalPlaylistAddToSrc', names);
        elGetById('addToPlaylistCaption').textContent = tn('Add to playlist');
    }
    if (features.featPlaylists) {
        filterPlaylistsSelect(1, 'modalPlaylistAddToPlistInput', '', '');
    }
    uiElements.modalPlaylistAddTo.show();
}

/**
 * Toggles the view in the add to playlist modal
 * @param {EventTarget} target event target
 * @returns {void}
 */
//eslint-disable-next-line no-unused-vars
function toggleAddToPlaylistFrm(target) {
    toggleBtnGroup(target);
    if (target.getAttribute('id') === 'modalPlaylistAddToPlaylistBtn') {
        //add to playlist
        elShowId('modalPlaylistAddToPlaylistFrm');
        elShowId('modalPlaylistAddToPosInsertFirstRow');
        elHideId('modalPlaylistAddToPosInsertRow');
        elHideId('modalPlaylistAddToPosAppendPlayRow');
        elHideId('modalPlaylistAddToPosReplacePlayRow');
    }
    else {
        //add to queue
        elHideId('modalPlaylistAddToPlaylistFrm');
        elHideId('modalPlaylistAddToPosInsertFirstRow');
        elShowId('modalPlaylistAddToPosInsertRow');
        elShowId('modalPlaylistAddToPosAppendPlayRow');
        elShowId('modalPlaylistAddToPosReplacePlayRow');
    }
}

/**
 * Adds the selected elements from the "add to playlist" modal to the playlist or queue
 * @param {Element} target triggering element
 * @returns {void}
 */
//eslint-disable-next-line no-unused-vars
function addToPlaylist(target) {
    cleanupModalId('modalPlaylistAddTo');
    const type = getDataId('modalPlaylistAddToUrisInput', 'type');
    const entities = getDataId('modalPlaylistAddToUrisInput', 'entities');
    const mode = getRadioBoxValueId('modalPlaylistAddToPos');
    if (type === 'stream') {
        const streamUrlEl = elGetById('modalPlaylistAddToUrisInput');
        if (validateStreamEl(streamUrlEl) === false) {
            return;
        }
        entities[0] = streamUrlEl.value;
    }
    btnWaiting(target, true);
    if (elGetById('modalPlaylistAddToPlaylistFrm').classList.contains('d-none') === false) {
        // add to playlist
        const plistEl = elGetById('modalPlaylistAddToPlistInput');
        switch(mode) {
            case 'append':
                appendPlaylist(type, entities, plistEl.value, modalClose);
                break;
            case 'insertFirst':
                insertPlaylist(type, entities, plistEl.value, 0, modalClose);
                break;
            case 'replace':
                replacePlaylist(type, entities, plistEl.value, modalClose);
                break;
            default:
                logError('Invalid mode: ' + mode);
        }
    }
    else {
        // add to queue
        switch(mode) {
            case 'append':
                appendQueue(type, entities, modalClose);
                break;
            case 'appendPlay':
                appendPlayQueue(type, entities, modalClose);
                break;
            case 'insertAfterCurrent':
                insertAfterCurrentQueue(type, entities, modalClose);
                break;
            case 'insertPlayAfterCurrent':
                insertPlayAfterCurrentQueue(type, entities, modalClose);
                break;
            case 'replace':
                replaceQueue(type, entities, modalClose);
                break;
            case 'replacePlay':
                replacePlayQueue(type, entities, modalClose);
                break;
            default:
                logError('Invalid mode: ' + mode);
        }
    }
}
