import auditLogModel from "./auditLog.model";
import { IAuditLog } from "./auditLog.interface";

export class AuditLogService {


    //Registrar una acción
    async create(
        data:IAuditLog
    ){
        const auditLog = new auditLogModel(data);

        return await auditLog.save();
    }

    //Obtener todos los registros

    async getAll(){

        return await auditLogModel
        .find()
        .populate("userId")
        .sort({
            createdAt: -1
        });
    }

    async getById(
        id:string
    ){
        return await auditLogModel
        .findById(id)
        .populate("userId");
    }

    async getByUser(
        userId:string
    ){
        return await auditLogModel
        .find({
            userId
        })
        .sort({
            createdAt: -1
        })
    }

    async getByModule(
        module:IAuditLog["module"]
    ){
        return await auditLogModel
        .find({
            module
        })
        .populate("userId")
        .sort({
            createdAt: -1
        });
    }

    async getByAction(
        action:IAuditLog["action"]
    ){
        return await auditLogModel
        .find({
            action
        })
        .populate("userId")
        .sort({
            createdAt: -1
        })
    }

    async getByStatus(
        status:IAuditLog["status"]
    ){
        return await auditLogModel
        .find({
            status
        })
        .populate("userId")
        .sort({
            createdAt: -1
        })
    }

    async getByDateRange(
        startDate:Date,
        endDate:Date
    ){

        return await auditLogModel
        .find({
            createdAt:{
                $gte:startDate,
                $lte:endDate
            }
        })
        .populate("userId")
        .sort({
            createdAt: -1
        })
    }

    async delete(
        id:string
    ){
        return await auditLogModel.findById(id);
    }
}