class Dashboard extends Shadow {

    COL = {
        time:    14,
        fname:   6,
        lname:   6,
        email:   20,
        phone:   12,
        message: 24,
        county:  10
    };

    cell(type, value) {
        return p(value)
            .width(this.COL[type], pct)
            .whiteSpace("nowrap")
            .overflowX("auto")
            .overflowY("hidden")
    }

    spawnModal(msg) {
        let div = document.createElement("div")
        div.classList.add("modal")
        div.innerText = msg
        div.style.left = "50vw"
        div.style.top = "50vh"
        div.style.padding = "5em"
        div.style.borderRadius = "12px"
        div.style.position = "fixed"
        div.style.backgroundColor = "var(--accent)"
        div.style.color = "var(--main)"
        div.style.transform = "translate(-50%, -50%)"
        document.body.appendChild(div)

        let p = document.createElement("p")
        p.innerText = "X"
        p.color = "red"
        p.style.position = "absolute"
        p.style.top = "1em"
        p.style.right = "2em"
        p.style.cursor = "pointer"
        p.onClick((finished) => {
            if(finished) {
                p.parentElement.remove()
            }
        })
        div.appendChild(p)
    }

    render() {
        VStack(() => {

            if(window.location.pathname.startsWith("/my")) {
                h1(global.profile.name);
                return
            }
            else if(!window.location.pathname.includes("comalyr")) {
                return
            }
            
            h1("Website Inquiries");

            p("Contact Us")
                .fontWeight("bold")
                .marginTop(4, em)
                .marginBottom(1, em)
                .fontStyle("italic")

            HStack(() => {
                p("Time").width(this.COL.time, pct).fontWeight("bold").whiteSpace("nowrap");
                p("First").width(this.COL.fname, pct).fontWeight("bold").whiteSpace("nowrap");
                p("Last").width(this.COL.lname, pct).fontWeight("bold").whiteSpace("nowrap");
                p("Email").width(this.COL.email, pct).fontWeight("bold").whiteSpace("nowrap");
                p("Phone").width(this.COL.phone, pct).fontWeight("bold").whiteSpace("nowrap");
                p("Message").width(this.COL.message, pct).fontWeight("bold").whiteSpace("nowrap")
                p("County").width(this.COL.county, pct).fontWeight("bold").whiteSpace("nowrap");
            })
            .width(95, pct)
            .maxWidth(95, pct)
            .gap(8);

            global.currentNetwork.data.contact.forEach((entry) => {

                HStack(() => {
                    this.cell("time", entry.time.replace(/:\d{6}(?=am|pm)/i, '')
                        .replace('-', '&nbsp;&nbsp;&nbsp;')
                        .replace(/(\d{1,2}:\d{2})(am|pm)/i, (_, time, meridiem) => {
                        const [h, m] = time.split(':');
                        return `${h.padStart(2, '0')}:${m}${meridiem.toLowerCase()}`;
                        }));
                    this.cell("fname", entry.fname);
                    this.cell("lname", entry.lname);
                    this.cell("email", entry.email);
                    this.cell("phone", entry.phone);
                    this.cell("message", entry.message)
                        .cursor("pointer")
                        .onHover(function (hovering) {
                            if(hovering) {
                                this.style.outline = "1px solid black"
                            } else {
                                this.style.outline = ""
                            }
                        })
                        .onClick((done) => {
                            if(done) {
                                this.spawnModal(entry.message)
                            }
                        })
                    this.cell("county", entry.county ?? "Not Specified");
                })
                .width(95, pct)
                .maxWidth(95, pct)
                .gap(8);
            });

            p("Join")
                .fontWeight("bold")
                .marginTop(4, em)
                .marginBottom(1, em)
                .fontStyle("italic")

            HStack(() => {
                p("Time").width(this.COL.time, pct).fontWeight("bold").whiteSpace("nowrap");
                p("First").width(this.COL.fname, pct).fontWeight("bold").whiteSpace("nowrap");
                p("Last").width(this.COL.lname, pct).fontWeight("bold").whiteSpace("nowrap");
                p("Email").width(this.COL.email, pct).fontWeight("bold").whiteSpace("nowrap");
                p("Phone").width(this.COL.phone, pct).fontWeight("bold").whiteSpace("nowrap");
                p("County").width(this.COL.county, pct).fontWeight("bold").whiteSpace("nowrap");
            })
            .width(95, pct)
            .maxWidth(95, pct)
            .gap(8);

            global.currentNetwork.data.join.forEach((entry) => {
                HStack(() => {
                    this.cell("time", entry.time.replace(/:\d{6}(?=am|pm)/i, '')
                        .replace('-', '&nbsp;&nbsp;&nbsp;')
                        .replace(/(\d{1,2}:\d{2})(am|pm)/i, (_, time, meridiem) => {
                        const [h, m] = time.split(':');
                        return `${h.padStart(2, '0')}:${m}${meridiem.toLowerCase()}`;
                        }));                    
                    this.cell("fname", entry.fname);
                    this.cell("lname", entry.lname);
                    this.cell("email", entry.email);
                    this.cell("phone", entry.phone);
                    this.cell("county", entry.county ?? "Not Specified");
                })
                .width(95, pct)
                .maxWidth(95, pct)
                .gap(8);
            });
        })
        .paddingTop(4, pct)
        .paddingLeft(5, pct)
        .width(100, pct)
        .height(100, pct);
    }
}

register(Dashboard)