from flask import Blueprint, render_template, request

from app.models import AuditLog
from app.models import Users
from flask_login import login_required

# Создаём Blueprint
dashboard_bp = Blueprint('dashboard', __name__, url_prefix='/telezab/')



# Роуты для отображения страниц
@dashboard_bp.route('/')
@login_required
def dashboard():
    return render_template('index.html')

@dashboard_bp.route('/users')
@login_required
def users_page():
    users = Users.query.all()
    return render_template('users.html', user=users)

@dashboard_bp.route('/logs')
@login_required
def logs_page():
    # Получаем параметры фильтрации из query string
    action = request.args.get('action', type=str)
    username = request.args.get('username', type=str)
    timestamp_from = request.args.get('timestamp_from', type=str)
    timestamp_to = request.args.get('timestamp_to', type=str)
    order = request.args.get('order', 'asc').lower()
    page = request.args.get('page', 1, type=int)
    per_page = 20

    query = AuditLog.query

    # Фильтрация по action
    if action:
        query = query.filter(AuditLog.action.ilike(f'%{action}%'))

    # Фильтрация по username
    if username:
        query = query.filter(AuditLog.username.ilike(f'%{username}%'))

    # Фильтрация по дате (начало)
    if timestamp_from:
        try:
            from datetime import datetime
            dt_from = datetime.strptime(timestamp_from, '%Y-%m-%d')
            query = query.filter(AuditLog.timestamp >= dt_from)
        except ValueError:
            pass  # Игнорируем неверный формат

    # Фильтрация по дате (конец)
    if timestamp_to:
        try:
            from datetime import datetime, timedelta
            dt_to = datetime.strptime(timestamp_to, '%Y-%m-%d') + timedelta(days=1)
            query = query.filter(AuditLog.timestamp < dt_to)
        except ValueError:
            pass

    # Сортировка
    if order == 'asc':
        query = query.order_by(AuditLog.timestamp.asc())
    else:
        query = query.order_by(AuditLog.timestamp.desc())

    # Пагинация
    logs = query.paginate(page=page, per_page=per_page, error_out=False)

    # Передаем текущие фильтры и сортировку в шаблон для отображения и генерации ссылок
    filters = {
        'action': action,
        'username': username,
        'timestamp_from': timestamp_from,
        'timestamp_to': timestamp_to,
        'order': order
    }

    return render_template('logs.html', logs=logs, filters=filters)

@dashboard_bp.route('/regions')
@login_required
def regions_page():
    return render_template('regions.html')

@dashboard_bp.route('/health')
def healthcheck():
    pass

