# Copyright (c) 2023, François Pelletier
# Disponible sous licence AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)

import json
import logging
import random
from pathlib import Path

import streamlit as st
from streamlit import session_state as ss

# Initialize session state

if "current_question" not in ss:
    ss.current_question = None

if "questions_lues" not in ss:
    ss.questions_lues = False

with open("donnees/licences.json") as file:
    licences_data = json.load(file)["licences"]
    licences_dict = {}
    for licence_data in licences_data:
        licences_dict[licence_data["licenceId"]] = licence_data
    licences_dict = licences_dict


# Function to select a random question
def select_question():
    """
    This function selects a random question from the list of questions and shuffles the answers for each question.
    """
    if not ss.questions_lues:
        with open("donnees/questions.json") as file:
            ss.questions = json.load(file)["questions"]
            random.shuffle(ss.questions)
            ss.questions_lues = True
    logging.info("Appel de la fonction select_question()")
    ss.current_question = ss.questions.pop()
    # Shuffle the answers
    answers = ss.current_question["answers"].copy()
    random.shuffle(answers)
    ss.current_answers = answers


# Function to check the selected answer
def check_answer():
    """
    This function checks the selected answer.
    :return:
    """
    logging.info("Appel de la fonction check_answer()")
    correct_answer = ss.current_question["answers"][0]
    selected_answer = ss.selected_answer

    licence = ss.current_question["licence"]
    nom = licences_dict[licence]["name"]
    url = licences_dict[licence]["url"]
    logo = licences_dict[licence]["logo"]

    if selected_answer == correct_answer:
        st.success("Bonne réponse!")
    else:
        st.error(f"Mauvaise réponse! La bonne réponse est: {correct_answer}")
    st.subheader("Explication")
    st.write(ss.current_question["explanation"])
    st.markdown(f"Cette licence se nomme [{nom}]({url})")
    st.image(f"logos/{logo}")
    ss.clear()


# Main app
st.image("images/banniere.jpeg")
st.title("Culture Créative - Version Bêta !")

# Haut de page
header_content = Path("donnees/header.md").read_text()
st.markdown(header_content, unsafe_allow_html=True)

# Check if a question is already selected
if not ss.current_question:
    select_question()

# Form for answer
with st.form("answer_form"):
    logging.info("Afficher la question")
    # Display the current question
    st.subheader("Question")
    st.write(ss.current_question["question"])
    # Display the answer options
    logging.info("Afficher les réponses possibles")
    st.subheader("Réponses possibles")
    ss.selected_answer = st.radio(f"Choisis une réponse", options=["---"] + ss.current_answers, key=0)
    # Display the correct answer
    if st.form_submit_button(label="Vérifier") and ss.selected_answer != "---":
        logging.info("Vérifier la réponse")
        check_answer()
        if st.form_submit_button(label="Prochaine question"):
            logging.info("Prochaine question")
            ss.clear()
            select_question()
# Pied de page
footer_content = Path("donnees/footer.md").read_text()
st.markdown(footer_content, unsafe_allow_html=True)
