import os
import time
from zipfile import ZipFile

from flask import redirect, render_template, send_file

from rc import BACKUPS_DIR, DB_FILE_NAME, DB_FILE_PATH, VERSION


def db_page():
    """страница для обслуживания базы данных"""

    if not os.path.exists(BACKUPS_DIR):
        os.mkdir(BACKUPS_DIR)

    # список всех файлов в каталоге backups
    files = os.listdir(BACKUPS_DIR)
    files.sort()

    # NOTE: VERSION = 1.0.0 in db - whats version used?
    data = {"VERSION": VERSION, "DB_FILE": DB_FILE_NAME, "SHARED_FILES": files}
    return render_template("service/db.html", **data)


def db_backup():
    """создание backup для базы данных"""

    db_dir = os.path.dirname(DB_FILE_PATH)

    # новый файл
    now_time = time.strftime("%Y.%m.%d-%H.%M.%S")
    dest_file = os.path.join(BACKUPS_DIR, DB_FILE_NAME + "." + now_time)

    cwd = os.getcwd()

    # создание архива
    with ZipFile(dest_file + ".zip", "w") as zfile:
        # перемещаемся в каталог базы данных(чтобы путь в архиве был нормальный)
        os.chdir(db_dir)
        zfile.write(DB_FILE_NAME)

    os.chdir(cwd)

    return redirect("/service/db")


def db_download(file_name):
    """скачивание заданного файла"""

    # полный путь
    file_path = os.path.join(BACKUPS_DIR, file_name)

    if os.path.exists(file_path):
        return send_file(file_path)
    else:
        return redirect("/service/db")


def db_remove(file_name):
    """удаление заданного файла"""

    # полный путь
    file_path = os.path.join(BACKUPS_DIR, file_name)

    if os.path.exists(file_path):
        os.remove(file_path)

    return redirect("/service/db")
