<?php 
namespace App\Models;

use CodeIgniter\Model;

class SortieCaisse extends Model
{
    /**
     * table name
     * @var string
     */
    protected $table = 'sortie_caisse';
    protected $primaryKey = 'id_sortie'; // Primary key column
    protected $allowedFields = [
        'montant_retire',
        'date_retrait',
        'motif',
        'commentaire',
        'fournisseur',
        'nif_cin',
        'statistique',
        'telephone',
        'code_postal',
        'preuve_achat',
        'sortie_personnel',
        'source_fond',
        'initiateur_demande',
        'statut',
        'user_id',
        'store_id',
        'mime_type',
        'admin_raison'
    ];
    public function getAllSortieCaisse()
{
    try {
        $session = session();
        $users   = $session->get('user');
        if ($users['group_name'] === 'Direction') {
            return $this
                ->select('*')
                ->orderBy('date_retrait', 'DESC')
                ->findAll();
        }
        
        if ($users['group_name'] === 'Conseil') {
            return $this
                ->select('*')
                ->orderBy('date_retrait', 'DESC')
                ->findAll();
        }
        
        if($users["group_name"]==="Caissière"){
            return $this
            ->select('*')
            ->where('user_id', $users['id'])
            ->orderBy('date_retrait', 'DESC') 
            ->findAll();
        }
        return $this
            ->select('*')
            ->where('user_id', $users['id'])
            ->orderBy('date_retrait', 'DESC') 
            ->findAll();
    } catch (\Exception $e) {
        log_message('error', 'Erreur lors de la récupération des sorties caisse : ' . $e->getMessage());
        return [];
    }
}

public function getAllSortieCaisse1()
{
    try {
        $session = session();
        $users   = $session->get('user');
        if ($users['group_name'] === 'Direction') {
            return $this
                ->select('*')
                ->join('user_group', 'user_group.user_id = sortie_caisse.user_id')
                ->where('user_group.group_id', 7)
                ->orderBy('date_retrait', 'DESC')
                ->findAll();
        }
        
        if ($users['group_name'] === 'Conseil') {
            return $this
                ->select('*')
                ->join('user_group', 'user_group.user_id = sortie_caisse.user_id')
                ->where('user_group.group_id', 6)
                ->orderBy('date_retrait', 'DESC')
                ->findAll();
        }
        
        if($users["group_name"]==="Caissière"){
            return $this
            ->select('*')
            ->where('user_id', $users['id'])
            ->orderBy('date_retrait', 'DESC') 
            ->findAll();
        }
        return $this
            ->select('*')
            ->where('user_id', $users['id'])
            ->orderBy('date_retrait', 'DESC') 
            ->findAll();
    } catch (\Exception $e) {
        log_message('error', 'Erreur lors de la récupération des sorties caisse : ' . $e->getMessage());
        return [];
    }
}

    

    public function addSortieCaisse( array $data) {
        try {
            return  $this->insert($data);
        } catch (\Exception $e) {
            log_message('error', 'Erreur lors de l\'ajout de la sortie : ' . $e->getMessage());
            return false;
        }  
    }

    public function updateSortieCaisse(int $id, array $data) {
        // Vérifier si l'ID est valide (par exemple, positif et non nul)
        if ($id <= 0) {
            log_message('error', 'ID invalide pour la mise à jour de la sortie caisse : ' . $id);
            return false;
        }
    
        try {
            // Essayer de mettre à jour les données
            return $this->update($id, $data);
        } catch (\Exception $e) {
            // En cas d'exception, loguer l'erreur
            log_message('error', 'Erreur lors de la mise à jour du recouvrement : ' . $e->getMessage());
            return false; 
        }
    }
    
    public function getSortieCaisseSingle(int $id)
    {
        $reparation = $this->select('*')
            ->where('id_sortie', $id)
            ->first();
        // return $this->where('user_id', $id)->findAll();

        return $reparation;
    }

    public function getTotalSortieCaisse() {
        $session = session();
        $users =  $session->get('user');
        $isAdmin = in_array($users['group_name'], ['Conseil', 'Direction']);
        if ($isAdmin) {
            try {
                return $this->select('
                    SUM(montant_retire) AS mr,
                    
                ')
                ->where('statut', "Valider")
                ->get()
                ->getRowObject();
            } catch (\Exception $e) {
                log_message('error', 'Erreur lors de la récupération des sorties caisse : ' . $e->getMessage());
                return false;
            }
        } else {
            return $this->select('SUM(montant_retire) AS mr')
                ->where('store_id', $users['store_id'])
                ->where('statut', "Valider")
                ->get()
                ->getRowObject();
        }
        
    }
}