<?php

namespace App\Traits;

use App\Models\Admin;
use App\Models\Admin\Interna;
use App\Models\EncuestaNps;
use App\Models\Files;
use App\Models\Promociones;
use Carbon\Carbon;

trait DashboardTrait
{

    public function getNpsActivo()
    {
        $encuesta = EncuestaNps::query()
            ->selectFillable()
            ->habilitado()
            ->latest()
            ->first();
        if (!$encuesta) return null;

        $encuesta->total = $encuesta->detractors + $encuesta->passives + $encuesta->promoters;
        $encuesta->percent = (object)[
            'detractors' => round(($encuesta->detractors / $encuesta->total) * 100),
            'passives' => round(($encuesta->passives / $encuesta->total) * 100),
            'promoters' => round(($encuesta->promoters / $encuesta->total) * 100)
        ];

        return $encuesta;
    }

    public function getArchivos($operadores = false)
    {
        return Files::where(function ($query) use ($operadores) {
            if ($operadores) {
                $query->where('key', 'operadores');
            }
        })->count();
    }

    public function getOperadores()
    {
        return Admin::where('root', false)->count();
    }

    public function getPromociones($operadores = false)
    {
        return Promociones::where('fecha_desde', '<=', Carbon::now())
            ->where('fecha_hasta', '>=', Carbon::now())
            ->where('operadores', $operadores)
            ->where('estado', true)
            ->count();
    }

    public function getInternas($operadores = false)
    {
        return Interna::where('estado', true)
            ->where('operadores', $operadores)
            ->count();
    }

    public function getPromocionesData($limit = 10)
    {
        return Promociones::where('fecha_desde', '<=', Carbon::now())
            ->where('fecha_hasta', '>=', Carbon::now())
            ->where('operadores', true)
            ->where('estado', true)
            ->selectFillableAnd(['id as image_large_getter', 'created_at'])
            ->limit($limit)
            ->latest()
            ->get();
    }

    public function getInternaData($limit = 10)
    {
        return Interna::where('estado', true)
            ->with('secciones')
            ->where('operadores', true)
            ->selectFillableAnd(['id as image_large_getter'])
            ->limit($limit)
            ->latest()
            ->get();
    }
}
