import streamlit as st

from utils.db import (
    add_candidate,
    add_district,
    delete_candidate,
    list_candidates,
    list_districts,
    update_candidate,
)


def render():
    district_id = st.session_state.get("district_id")
    districts = {d["id"]: d["name"] for d in list_districts()}

    if not district_id:
        st.info("أضف دائرة انتخابية أولاً.")
    else:
        st.caption(f"الدائرة الحالية: **{districts[district_id]}**")

        candidates = list_candidates(district_id)

        with st.container(border=True):
            st.subheader("إضافة مترشح / لائحة")
            with st.form("add_candidate_form", clear_on_submit=True):
                col1, col2 = st.columns(2)
                name = col1.text_input("اسم المترشح أو رأس اللائحة")
                party = col2.text_input("الحزب / اللائحة")
                submitted = st.form_submit_button("إضافة", icon=":material/add:")
                if submitted:
                    if name.strip():
                        add_candidate(district_id, name, party)
                        st.toast(f"تمت إضافة {name}", icon=":material/check_circle:")
                        st.rerun()
                    else:
                        st.warning("الرجاء إدخال اسم المترشح.")

        st.subheader(f"القائمة الحالية ({len(candidates)})")
        if not candidates:
            st.info("لا يوجد مترشحون بعد لهذه الدائرة.")
        else:
            for c in candidates:
                with st.container(border=True, horizontal=True, vertical_alignment="center"):
                    c1, c2, c3 = st.columns([3, 3, 1])
                    new_name = c1.text_input(
                        "الاسم", value=c["name"], key=f"name_{c['id']}", label_visibility="collapsed"
                    )
                    new_party = c2.text_input(
                        "الحزب", value=c["party"], key=f"party_{c['id']}", label_visibility="collapsed"
                    )
                    if (new_name != c["name"]) or (new_party != c["party"]):
                        update_candidate(c["id"], new_name, new_party)
                    if c3.button("حذف", key=f"del_{c['id']}", icon=":material/delete:"):
                        delete_candidate(c["id"])
                        st.rerun()

    with st.expander(":material/add_location_alt: إضافة دائرة انتخابية جديدة"):
        new_district = st.text_input("اسم الدائرة الجديدة", key="new_district_name")
        if st.button("إضافة الدائرة", icon=":material/add:"):
            if new_district.strip():
                add_district(new_district.strip())
                st.toast("تمت إضافة الدائرة", icon=":material/check_circle:")
                st.rerun()


if __name__ == "__main__":
    render()
