"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getHistoricoActividade = exports.getHistoricoActividades = void 0;
const aws_1 = require("../../services/aws");
const main_1 = require("../../util/main");
const pagination_1 = require("../../util/pagination");
const validate_url_1 = __importDefault(require("../../util/validate-url"));
const prisma_1 = require("../../database/prisma");
const getHistoricoActividades = async (req, res, next) => {
    var _a;
    try {
        let { status, userId, action, cnp, mes, semana, ano, modelName, modelId, espacoDesportivoId, } = req.query;
        const page = (0, pagination_1.getPage)(req.query.page);
        let paramPerPage = req.query.perPage;
        let perPage = 50;
        if (paramPerPage) {
            perPage = +paramPerPage;
        }
        let filterObject = {};
        if (Boolean(espacoDesportivoId)) {
            filterObject.espacoDesportivo = espacoDesportivoId;
        }
        if (Boolean(status)) {
            filterObject.status = status;
        }
        if (Boolean(userId)) {
            filterObject.user = userId;
        }
        if (Boolean(action)) {
            filterObject.action = action;
        }
        if (Boolean(modelName)) {
            filterObject.modelName = modelName;
        }
        if (Boolean(modelId)) {
            filterObject.modelId = modelId;
        }
        if (Boolean(cnp)) {
            filterObject.cnp = JSON.parse(cnp);
        }
        if (Boolean(ano)) {
            const newAno = parseInt(ano);
            filterObject.createdAt = (0, main_1.filterByYear)(newAno);
        }
        if (Boolean(ano) && Boolean(mes) && !Boolean(semana)) {
            const newAno = parseInt(ano);
            const newMes = parseInt(mes) - 1;
            filterObject.createdAt = (0, main_1.filterByMonth)(newAno, newMes);
        }
        if (Boolean(ano) && Boolean(semana) && !Boolean(mes)) {
            const newAno = parseInt(ano);
            const newWeek = parseInt(semana);
            filterObject.createdAt = (0, main_1.filterByWeek)(newAno, newWeek);
        }
        const total = await prisma_1.prisma.historicoActividade.count({ where: filterObject });
        let historicoActividades = await prisma_1.prisma.historicoActividade.findMany({
            where: filterObject,
            take: perPage,
            skip: (0, pagination_1.skip)(page, perPage),
            orderBy: { createdAt: 'desc' },
            include: { user: { include: { dadosPessoais: true } } },
        });
        for (const ha of historicoActividades) {
            const dadosPessoais = (_a = ha === null || ha === void 0 ? void 0 : ha.user) === null || _a === void 0 ? void 0 : _a.dadosPessoais;
            if (dadosPessoais) {
                if (dadosPessoais.fotoURL && !(0, validate_url_1.default)(dadosPessoais.fotoURL)) {
                    dadosPessoais.fotoURL = await (0, aws_1.getURL)(dadosPessoais.fotoURL);
                }
            }
        }
        res.status(200).json({
            msg: 'Sucesso',
            historicoActividades,
            ...(0, pagination_1.paginationResult)(total, page, perPage),
        });
    }
    catch (err) {
        next(err);
    }
};
exports.getHistoricoActividades = getHistoricoActividades;
// Controller para buscar historicoActividade pelo id
const getHistoricoActividade = async (req, res, next) => {
    var _a;
    try {
        const { id } = req.params;
        const historicoActividade = await prisma_1.prisma.historicoActividade.findUnique({
            where: { id: Number(id) },
            include: { user: { include: { dadosPessoais: true } } },
        });
        if (!historicoActividade) {
            const error = new Error('Histórico de actividade não encontrado!');
            error.statusCode = 422;
            throw error;
        }
        const dadosPessoais = (_a = historicoActividade === null || historicoActividade === void 0 ? void 0 : historicoActividade.user) === null || _a === void 0 ? void 0 : _a.dadosPessoais;
        if (dadosPessoais) {
            if (dadosPessoais.fotoURL && !(0, validate_url_1.default)(dadosPessoais === null || dadosPessoais === void 0 ? void 0 : dadosPessoais.fotoURL)) {
                dadosPessoais.fotoURL = await (0, aws_1.getURL)(dadosPessoais.fotoURL);
            }
        }
        res.status(200).json({ msg: 'Sucesso', historicoActividade });
    }
    catch (err) {
        next(err);
    }
};
exports.getHistoricoActividade = getHistoricoActividade;
