<html>

<head>
    <style>
        input {
            display: block;
            font-size: 1.5em;
            width: 75%;
        }
        
        button {
            font-size: 1.5em;
            padding: 5px;
        }
        
        .cookie,
        .output {
            padding: 15px;
            font-size: 1.2em;
            font-family: fantasy;
        }
    </style>
</head>

<body>
    <input type="text" name="cookieName" value="testName">
    <input type="text" name="cookieValue" value="test Value">
    <input type="date" name="cookieExpire">
    <button class="btn1">Set Cookie</button>
    <button class="btn2">Get Cookie</button>
    <button class="btn3">Delete Cookie</button>
    <button class="btn4">All Cookies</button>
    <div class="output"></div>
    <script>
        const output = document.querySelector(".output");
        const btns = document.querySelectorAll("button");
        const getVals = document.querySelectorAll("input");
        btns.forEach(function (btn) {
            btn.addEventListener("click", btnAction);
        })
        document.addEventListener("DOMContentLoaded", function () {
            const now = new Date();
            let nextWeek = (now.getDate() + 7);
            let day = ("0" + nextWeek).slice(-2);
            let month = ("0" + (now.getMonth() + 1)).slice(-2);
            let year = now.getFullYear();
            document.querySelector("input[type=date]").value = year + "-" + month + "-" + day;
        })

        function btnAction(e) {
            let temp = e.srcElement.innerText.substr(0, e.srcElement.innerText.indexOf(" "));
            let v = {};
            getVals.forEach(function (item, index) {
                let tempName = item.getAttribute("name");
                let tempValue = tempName != "cookieExpire" ? item.value : item.valueAsDate;
                v[tempName] = tempValue;
            })
            if (temp == "Set") {
                setCookie(v.cookieName, v.cookieValue, v.cookieExpire);
            }
            else if (temp == "Get") {
                getCookie(v.cookieName);
            }
            else if (temp == "Delete") {
                eraseCookie(v.cookieName);
            }
            else if (temp == "All") {
                listCookies();
            }
        }

        function setCookie(name, value, exp) {
            if (value.length > 0) {
                document.cookie = name + "=" + encodeURIComponent(value) + "; path=/; expires=" + exp.toUTCString();
                output.textContent = "Cookie " + name + " Set";
            }
            else {
                output.textContent = "Cookie needs a value";
            }
        }

        function getCookie(name) {
            let cookies = document.cookie.split(";");
            output.textContent = "No Cookies Found";
            cookies.forEach(function (item, index) {
                item = item.trim();
                let tempCookie = item.split("=");
                if (tempCookie[0] === name) {
                    output.textContent = "Found :" + tempCookie[0].trim() + " is " + decodeURIComponent(tempCookie[1]);
                }
            })
        }

        function eraseCookie(name) {
            document.cookie = name + "=; path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT;";
            output.textContent = "Cookie " + name + " Removed";
        }

        function listCookies() {
            let cookies = document.cookie.split(";");
            output.textContent = "";
            cookies.forEach(function (item, index) {
                item = item.trim();
                let tempCookie = item.split("=");
                if (tempCookie[0].length > 0) {
                    let div = document.createElement("div");
                    div.setAttribute("class", "cookie");
                    div.addEventListener("click", function () {
                        eraseCookie(tempCookie[0]);
                    })
                    div.textContent = tempCookie[0].trim() + " " + decodeURIComponent(tempCookie[1]);
                    output.appendChild(div);
                }
            })
        }
    </script>
</body>

</html>