"""Routes for surveys."""
import os, json, shutil, security, utils
from bottle import Bottle, route, post, view, request, redirect

surveys = Bottle()

@surveys.route("/surveys")
@view("surveys")
def list_surveys():
    """Presents user with list of surveys and options to edit and delete."""
    base = os.path.join("db", "surveys")
    os.makedirs(base, exist_ok=True) # Make sure surveys/ or create it otherwise
    surveys = next(os.walk(base))[1] # List dirs only
    public = utils.safejsonload(os.path.join(base, "public.json"))

    # HACK Check, simplfy maybe, looks kinda uggo
    # Only send surveys user can see
    session = request.environ.get("beaker.session")
    username = session.get("username")
    is_admin = security.is_admin(username)
    if username:
        if not is_admin:
            user_surveys = security.user_surveys(username)
            surveys = [ s for s in surveys if s in user_surveys + public ]
    else:
        surveys = public

    return dict(
        session = session,
        url = request.url,
        is_user = bool(username),
        is_admin = is_admin,
        surveys = surveys,
    )

@surveys.post("/surveys")
@view("surveys")
def list_surveys():
    """Delete survey if requested by deleting its directory recursively."""
    action = request.forms.get("action").split("%")[0]
    survey_name = "%".join(request.forms.get("action").split("%")[1:])

    if action == "delete":
        shutil.rmtree(os.path.join("db", "surveys", survey_name))

        # Remove from public surveys
        public_path = os.path.join("db","surveys", "public.json")
        public = utils.safejsonload(public_path, fallback=[])
        if survey_name in public:
            public.remove(survey_name)
            utils.safejsondump(public, public_path)

    redirect("/surveys") # Redirect to GET so back button doesn't resend
