<?php

namespace App\Services;

use App\Constants\ActivityTypes;
use App\Models\Customer;
use Illuminate\Support\Facades\Auth;
use Spatie\Activitylog\Models\Activity;

class BitacoraService
{
    /**
     * Registrar una actividad en la bitácora.
     *
     * @param string $description Descripción de la actividad
     * @param mixed $model El modelo afectado por la actividad (opcional)
     * @param array $properties Propiedades adicionales para almacenar (opcional)
     * @param string|null $logName Nombre del log (opcional)
     * @return Activity
     */
    public function logActivity(string $type, $model = null, array $properties = [])
    {
        $title = ActivityTypes::getTitle($type);
        $description = ActivityTypes::getDescription($type);
        $activity = activity($title)
            ->performedOn($model)
            ->causedBy(Auth::user() ?: null)
            ->withProperties($properties)
            ->log($description ?:null);

        return $activity;
    }

    /**
     * Obtener las actividades registradas.
     *
     * @param int $limit Número de actividades a obtener (por defecto 50)
     * @return \Illuminate\Database\Eloquent\Collection
     */
    public function getActivities(int $limit = 50)
    {
        return Activity::latest()->limit($limit)->get();
    }

    /**
     * Obtener las actividades relacionadas con un modelo específico.
     *
     * @param mixed $model El modelo para el que se quieren obtener las actividades
     * @param int $limit Número de actividades a obtener (por defecto 50)
     * @return \Illuminate\Database\Eloquent\Collection
     */
    public function getActivitiesForModel($model, int $limit = 50)
    {
        return Activity::forSubject($model)->orderBy('created_at', 'desc')->limit($limit)->get();
    }

}
