from browser import document, bind  # alert, window
import json


def chan_edit_data(items, channel_id):

    chanlist = []
    chandict = {}

    for element in items:
        if element.name == "id":
            if len(chandict.keys()) >= 2 and "id" in list(chandict.keys()):
                chanlist.append(chandict)
            chandict = {"id": element.value}
        if element.type == "checkbox":
            if element.name in ["enabled"]:
                save_val = element.checked
            else:
                save_val = int(element.checked)
        else:
            save_val = element.value
        if element.name != "id":
            cur_value = element.placeholder
            if element.type == "checkbox":
                if element.name in ["enabled"]:
                    cur_value = element.placeholder
                else:
                    cur_value = int(element.placeholder)
            if str(save_val) != str(cur_value):
                chandict[element.name] = save_val

    if channel_id != "all":
        chanlist == [x for x in chanlist if x["id"] == channel_id]

    return chanlist


def chan_edit_postform(chanlist):
    postForm = document.createElement('form')
    postForm.method = "POST"
    postForm.action = "/api/channels?method=modify&redirect=/channels_editor"
    postForm.setRequestHeader = "('Content-Type', 'application/json')"

    postData = document.createElement('input')
    postData.type = 'hidden'
    postData.name = "channels"
    postData.value = json.dumps(chanlist)

    postForm.appendChild(postData)
    document.body.appendChild(postForm)
    return postForm


@bind("#Chan_Edit_Reset", "submit")
def chan_edit_reset(evt):
    chanlist = chan_edit_data(
                              document.select(".reset"),
                              str(evt.currentTarget.children[0].id).replace("reset_", ""))
    postForm = chan_edit_postform(chanlist)
    postForm.submit()
    evt.preventDefault()


@bind("#Chan_Edit_Modify", "submit")
def chan_edit_modify(evt):
    chanlist = chan_edit_data(
                              document.select(".channels"),
                              str(evt.currentTarget.children[0].id).replace("update_", ""))
    postForm = chan_edit_postform(chanlist)
    postForm.submit()
    evt.preventDefault()


@bind("#Chan_Edit_Enable_Toggle", "click")
def chan_edit_enable(event):
    enable_bool = bool(int(document["enable_button"].value))
    for element in document.get(selector='input[type="checkbox"]'):
        if element.name == "enabled":
            element.checked = enable_bool
            element.value = enable_bool

    if not enable_bool:
        document["enable_button"].value = "1"
        document["enable_button"].text = "Enable All"
    else:
        document["enable_button"].value = "0"
        document["enable_button"].text = "Disable All"


@bind("#Chan_Edit_Favorite_Toggle", "click")
def chan_edit_favorite(event):
    enable_bool = bool(int(document["favorite_button"].value))
    for element in document.get(selector='input[type="checkbox"]'):
        if element.name == "favorite":
            element.checked = enable_bool
            element.value = int(enable_bool)

    if not enable_bool:
        document["favorite_button"].value = "1"
        document["favorite_button"].text = "Favorite All"
    else:
        document["favorite_button"].value = "0"
        document["favorite_button"].text = "Unfavorite All"
