<?php 
namespace App\Models;

use CodeIgniter\Model;
use App\Models\Orders;
use DateTime;

class Remise extends Model
{
    /**
     * table name
     * @var string
     */
    protected $table = 'demande_remise';
    protected $primaryKey = 'id_demande'; // Primary key column
    protected $allowedFields = ['id_order', 'montant_demande', 'date_demande','product','id_store','demande_status','total_price'];

    public function getAllDemandeRemiseToday()
    {
        $session = session();
        $users = $session->get('user');
        if ($users["group_name"] === "Conseil") {
            try {

                $session = session();
                    $users = $session->get('user');
                    $users = session()->get('user_data');
            if($users['group_name'] === "Direction"){
                return $this ->where('demande_status', 'En attente')
                ->orderBy('date_demande', 'DESC')
                ->findAll();
            }
            return $this->where('demande_status', 'En attente')
            ->orderBy('date_demande', 'DESC')
            ->findAll();

        } catch (\Exception $e) {
            
            log_message('error', 'Erreur lors de la récupération des demandes du jour : ' . $e->getMessage());
            return [];
        }
        }
        try {

                $session = session();
                    $users = $session->get('user');
                    
            return $this
                ->where('id_store',$users['store_id'])
                ->orderBy('date_demande', 'DESC')
                ->findAll();

        } catch (\Exception $e) {
            
            log_message('error', 'Erreur lors de la récupération des demandes du jour : ' . $e->getMessage());
            return [];
        }
    }

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

    public function getRemiseData1(int $remise_id){
        return $this->select('montant_demande','id_order')
        ->where('id_demande',$remise_id)
        ->first();
    }

    public function updateRemise( $id,$data) {
        if ($id <= 0) {
            log_message('error', 'ID invalide pour la mise à jour du recouvrement : ' . $id);
            return false;
        }
    
        try {
            // Essayer de mettre à jour les données
            return $this->update($id, $data);
            if ($data['demande_status'] == 'accepte') {
                $Order = new Orders();
                $remise_data = $this->getRemiseData1($id);
                $montant_demande = $remise_data->montant_demande;
                $order_id = $remise_data->id_order;
                $data1 = [
                    'net_amount' => $montant_demande,
                    'gross_amount' => $montant_demande
                ];
                $data2 = [
                    'rate' => $montant_demande,
                    'amount' => $montant_demande
                ];
                $Order->update1($order_id, $data1,$data2);
            }
        } 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 getProductByDemandeId(int $id_demande): ?string
    {
        $row = $this
            ->select('product')
            ->where('id_order', $id_demande)
            ->first();

        return $row['product'] ?? null;
    }

    public function updateRemise1(int $id,$data)
{
    $existing = $this->where('id_order', $id)->first();

    if ($existing) {
        // Mise à jour
        $this->update($existing['id_demande'], $data);
        return "Remise mise à jour avec succès.";
    } else {
        // Création
        $this->insert($data);
        return "Nouvelle remise créée avec succès.";
    }
}

}