"""Logs del web service SOAP (auditoria)."""
from flask import Blueprint, jsonify, request
from flask_login import login_required

from models import WebServiceLog


bp = Blueprint('logs', __name__)


@bp.route('', methods=['GET'])
@login_required
def list_logs():
    metodo   = request.args.get('metodo') or ''
    nit      = request.args.get('nit') or ''
    page     = max(int(request.args.get('page', 1)), 1)
    per_page = min(max(int(request.args.get('per_page', 50)), 1), 500)

    qs = WebServiceLog.query
    if metodo:
        qs = qs.filter(WebServiceLog.Metodo == metodo)
    if nit:
        qs = qs.filter(WebServiceLog.nit == nit)

    total = qs.count()
    items = (qs.order_by(WebServiceLog.Fecha.desc())
               .limit(per_page)
               .offset((page - 1) * per_page)
               .all())
    return jsonify(ok=True, total=total, page=page, per_page=per_page,
                   items=[l.to_dict() for l in items])


@bp.route('/stats', methods=['GET'])
@login_required
def stats():
    from sqlalchemy import func
    from models import db
    total = WebServiceLog.query.count()
    by_metodo = (db.session.query(WebServiceLog.Metodo, func.count(WebServiceLog.LogID))
                 .group_by(WebServiceLog.Metodo)
                 .all())
    return jsonify(ok=True, total=total,
                   by_metodo={m: c for m, c in by_metodo})
