// Please see documentation at https://learn.microsoft.com/aspnet/core/client-side/bundling-and-minification
// for details on configuring this project to bundle and minify static web assets.

// Write your JavaScript code.

$(function () {
    // 사이드 바 토글 유지
    let isHidden = aside.isHidden();

    if (isHidden) {
        aside.hideAside();
    } else {
        aside.showAside();
    }
});

// 좌측 메뉴 처리
class Aside {
    constructor() {
        this.body = document.body;
        this.aside = document.getElementById("aside");
        this.btnAsideToggle = document.getElementById("btnAsideToggle");
    }

    // 사이드 바 토글 시
    toggleAside(e) {
        let isHidden = this.isHidden();

        if (isHidden) {
            aside.showAside();
        } else {
            aside.hideAside();
        }
        setCookie("hidden-aside", isHidden ? "visible" : "hidden", 7);
    }

    // 사이드 바 토글 시 아이콘 변경
    toggleAsideIcon (isHidden) {
        let icon = this.btnAsideToggle.querySelector("i");
        if (isHidden) {
            icon.classList.remove("bi-arrow-left");
            icon.classList.add("bi-arrow-right");
        } else {
            icon.classList.remove("bi-arrow-right");
            icon.classList.add("bi-arrow-left");
        }
    };

    // 숨김 여부 확인
    isHidden() {
        let isHidden = getCookie("hidden-aside") ;
        if (isHidden == "") {
            isHidden = this.body.classList.contains("hidden-aside");
        }
        return (isHidden === "hidden");
    }

    // 보이기
    showAside() {
        this.body.classList.remove("hidden-aside");
        this.toggleAsideIcon(0);
        setCookie("hidden-aside", "visible", 7);
    }

    // 숨기기
    hideAside() {
        this.body.classList.add("hidden-aside");
        this.toggleAsideIcon(1);
        setCookie("hidden-aside", "hidden", 7);
    }
}

const aside = new Aside();

document.getElementById("btnAsideToggle").addEventListener("click", (e) => aside.toggleAside(e));

// 화면이 작아지면
window.addEventListener("resize", function () {
    if (window.innerWidth > 768) {
        aside.showAside(0);
    } else {
        aside.hideAside(1);
    }
});

// 메뉴 토글 유지
document.querySelectorAll(".collapse").forEach(e => {
    const collapseID = e.id;
    const collapseState = getCookie(collapseID);
    if (collapseState === "open") {
        new bootstrap.Collapse(e, { show: true });
    } else if (collapseState === "closed") {
        new bootstrap.Collapse(e, { toggle: false });
    }
    e.addEventListener("show.bs.collapse", () => {
        setCookie(collapseID, "open", 7);
    });
    e.addEventListener("hide.bs.collapse", () => {
        setCookie(collapseID, "closed", 7);
    });
});

// 드롭박스 적용
const dropdownList = [...document.querySelectorAll('.dropdown-toggle')].map(e => new bootstrap.Dropdown(e));

// 목록 버튼상자
class ActionButtons {
    constructor() {
        this.form = document.getElementById("fAdminList");
    }

    validate() {
        let checked = $("input:checkbox.list-check-box:checked");
        if (checked.length < 1) {
            alert("자료를 하나 이상 선택하세요.");
            return false;
        }
        return true;
    }

    checkout(e) {
        const action = (e.target.dataset.action || e.target.closest("a").href);
        if (!action) {
            alert("처리 주소를 확인하세요.");
            return false;
        }

        this.form.action = action;
        this.form.submit();
    }

    Update(e) {
        if (!this.validate()) {
            return false;
        }

        if (confirm("선택한 자료를 정말 수정 하시겠습니까?")) {
            this.checkout(e);
        }
    }

    Delete(e) {
        if (!this.validate()) {
            return false;
        }

        if (confirm("선택한 자료를 정말 삭제 하시겠습니까?")) {
            this.checkout(e);
        }
    }

    Recover(e) {
        if (!this.validate()) {
            return false;
        }

        if (confirm("선택한 자료를 정말 복원 하시겠습니까?")) {
            this.checkout(e);
        }
    }

    checkedAll(e) {
        let chk = document.getElementsByClassName("list-check-box");
        for (let i = 0; i < chk.length; i++) {
            if (e.target.getAttribute("form") == chk[i].getAttribute("form")) {
                chk[i].checked = e.target.checked;
            }
        }
        if(e.target.checked) {
            $("[data-action]").prop("disabled", false);
        } else {
            $("[data-action]").prop("disabled", true);
        }
    }
}

const actionButtons = new ActionButtons();
$(document).on("click", "#btnListUpdate", (e) => actionButtons.Update(e));
$(document).on("click", "#btnListDelete", (e) => actionButtons.Delete(e));
$(document).on("click", "#btnListRecover", (e) => actionButtons.Recover(e));
$(document).on("click", ".btn-row-delete", () => confirm("정말 삭제 하시겠습니까?"));

// 모든 라디오, 체크박스 선택/해제
$(document).on("click", "#checkedAll", (e) => actionButtons.checkedAll(e));