#!/usr/bin/python3
#encoding:utf-8


from sitepackage.cgiweb import template, cgi_cover
from sitepackage.thissql import sqlw, sqlr
import datetime
import os


__config__ = {
  "template_dir_path":"template",
  "roles":[
    ["admin", "admin.py", "страница админа"],
    ["password", "password.py", "сменить пароль"],
    ["pay_sys_edit", "pay_sys_edit.py", "pay_sys_edit"],
    ["admin_two", "admin2.py", "admin_two"],
    ["pay_sys_test", "pay_sys_test.py", "pay_sys_test"],
    ["list_apps", "list_apps.py", "list_apps"],
    ["admin_tre", "admin3.py", "admin_tre"]
  ]
}


def make_header(login, role):
  roles = role[0][0].split()
  links = []
  for this_role, href, name in __config__["roles"]:
    if this_role in roles:
      links.append("""<a href="%s">%s</a>""" % (href, name))
  header = template("""
    <table style="width: 100%;">
      <tr>
        <form action="auth.py" method="post">
          <input type="hidden" name="exit">
          <td>
          пользователь:
${login}
            <button type="submit">
              Выйти
            </button>
          </td>
        </form>
        <td align="right">
${links}
        </td>
      </tr>
    </table>
<br>""", {
      "login":login,
      "links":" | ".join(links)})
  return header


def main(geted_simple_cookies, info, parametrs, files):
  errors, ok = None, False
  if 'session_id' in geted_simple_cookies:
    session_id = geted_simple_cookies['session_id'].value
    if "exit" in parametrs:
      sqlw("DELETE FROM sessions WHERE session_id=?", [session_id])
    sessions_data = sqlr("SELECT login,expires FROM sessions WHERE session_id=?",
      [session_id])
    if len(sessions_data) == 1:
      login, expires = sessions_data[0]
      utcnow = datetime.datetime.utcnow()
      if expires > str(utcnow.timestamp()):
        role = sqlr("SELECT role FROM users WHERE login=?", [login])
        if "admin" in role[0][0]:
          ok = True
        else:
          errors = "error4.no access"
      else:
        errors = "error1.session expire"
    else:
      errors = "error2.session expire"
  else:
    errors = "error3.no email or pass"
  if ok:
    role_count = str(len(__config__["roles"]))
    role_name = ""
    for this_role, href, name in __config__["roles"]:
      role_name += """<td>%s</td>""" % name
    table = ""
    for this_login, this_role in sqlr("SELECT login, role FROM users"):
      table += """
      <tr>
        <td>
          %s
        </td>
        <form action="settings_update.py" method="post">
          <input type="hidden" name="redirect" value="admin.py">
          <input type="hidden" name="action" value="del_user">
          <input type="hidden" name="user_to_del" value="%s">
          <td>
            <button type="submit">
              удалить
            </button>
          </td>
        </form>
        <form action="settings_update.py" method="POST">
          <input type="hidden" name="action" value="password_generate">
          <input type="hidden" name="user_to_update" value="%s">
          <input type="hidden" name="redirect" value="admin.py">
          <td>
            <button type="submit">
              сгенерировать
            </button>
          </td>
        </form>""" % (this_login, this_login, this_login)
      for index in __config__["roles"]:
        if index[0] in this_role:
          action = "del_role"
          value_name = "role_to_del"
          text = "роль есть"
        else:
          action = "add_role"
          value_name = "role_to_add"
          text = "роли нет"
        table += """
        <form action="settings_update.py" method="post">
          <input type="hidden" name="redirect" value="admin.py">
          <input type="hidden" name="action" value="%s">
          <input type="hidden" name="%s" value="%s">
          <input type="hidden" name="user_to_update" value="%s">
          <td>
            <button type="submit">
              %s
            </button>
          </td>
        </form>""" % (action, value_name, index[0], this_login, text)
      table += """
      </tr>"""
    message = ""
    if "message" in parametrs:
      message = parametrs["message"][0]
    header = make_header(login, role)
    page = template(
      open(
        os.path.join(
          __config__["template_dir_path"],
          "admin.html"),
        encoding="utf8").read(),
      {
        "role_count":role_count,
        "role_name":role_name,
        "header":header,
        "message":message,
        "table":table
      }
    )
  else:
    page = errors
  return {'page':page}


if __name__ == '__main__':
  import cgitb
  cgitb.enable(display=1, logdir="log")
  cgi_cover(main)
