<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\License;
use Illuminate\Http\Request;
use App\Models\Application;
use App\Models\User;
use Carbon\Carbon;


class LicenseController extends Controller
{
    const CODE_VALID = 10;
    const CODE_INVALID = 22;
    const CODE_ALREADY_USED = 33;
    const CODE_EXPIRED = 44;
    const CODE_DISABLED = 55;

    //CODE_SUCCESS,CODE_ECHEC sont utilisés seulement pour dire que oui ou non si la code est utiliser
    const CODE_SUCCESS = 1;
    const CODE_ECHEC = 0;


    public function index()
    {
        // On récupère tous les utilisateurs
        $licenses = License::all();

        // On retourne les informations des utilisateurs en JSON
        return response()->json($licenses);
    }

    public function show(License $license)
    {
        return response()->json($license);
    }

    public function store(Request $request)
    {
        $license = License::create($request->all());

        return response()->json($license, 201);
    }

    public function update(Request $request, License $license)
    {
        $license->update($request->all());

        return response()->json($license, 200);
    }

    public function checkPersoLicense(Request $request)
    {
        $code = $request->input('code');
        $phone = $request->input('phone');
                
        $license = License::where('code', $code)
                ->where('phone', $phone)
                ->first();

        if (!$license) {
            // Le code n'existe pas
            return self::CODE_INVALID;
        }

        if ($license->used) {
            // Le code a déjà été utilisé
            return self::CODE_ALREADY_USED;
        }

        // Vérification de la date d'expiration
        if ($license->expire_date && now()->greaterThan($license->expire_date)) {
            // La licence est expirée
            return self::CODE_EXPIRED;
        }

        if ($license->disabled) {
            return self::CODE_DISABLED;
        }
        // Le code est valide
        return self::CODE_VALID;
    }

    /**
     * Le but de la fonction est de verifier en ligne si la license n'as pas été desactiver 
     * aussi si la license n'est pas expierer dans le cas ou le telephone n'est pas à jours
     * 
     * */

    public function checkAlwaysLicense(Request $request)
    {
        $code = $request->input('code');
        $phone = $request->input('phone');
   
        $license = License::where('code', $code)
        ->where('phone', $phone)
        ->first();

        if (!$license) {
            return self::CODE_INVALID;
        }

        if ($license->expire_date && now()->greaterThan($license->expire_date)) {
            return self::CODE_EXPIRED;
        }

        if ($license->disabled) {
            return self::CODE_DISABLED;
        }

        return self::CODE_VALID;
    }

    public function useLicense(Request $request)
    {
        $code = $request->input('code');
        $phone = $request->input('phone');
                
        $license = License::where('code', $code)
                ->where('phone', $phone)
                ->first();

        if ($license) {
            // Mettez l'attribut 'used' à true
            $license->used = true;
        
            $license->save();
            return self::CODE_SUCCESS;

        } 
        
        return self::CODE_ECHEC;
    }

    public function createUsedLicense(Request $request)
    {
        // Valider les données d'entrée
        $validatedData = $request->validate([
            'dealerCode' => 'nullable|string|max:255',
            'phone' => 'required|string|max:12|unique:licenses',
            'price' => 'nullable|numeric',
            'coupon' => 'nullable|string|max:255',
            'application_id' => 'nullable|integer',
        ]);


        $dealerCode = $request->input('dealerCode');
        $phone = $request->input('phone');
        
        $license = new License();

        $license->phone = $validatedData['phone'];

        if ($request->input('price')) {
            $license->price = $validatedData['price'];
        }

        if ($request->input('application_id')) {
            $license->application_id = $validatedData['application_id'];

        }

        $license->payment = "LIGDI CASH";

        // Obtenir l'heure actuelle et ajouter 6 mois
        $currentDate = Carbon::now();
        $expireDate = $currentDate->copy()->addMonths(12);

        $license->active_date = $currentDate;
        $license->expire_date = $expireDate;

        if ($request->input('coupon')) {
            $license->coupon = $validatedData['coupon'];
        }      

        if ($dealerCode) {
            
            $user = User::where('dealer_code', $dealerCode)
                ->first();

            if ($user) {
                $license->dealer_id = $user->id;
            }
            
        }      

       
        $license->used = true;

        $license->save();

        // Retourner une réponse JSON
        return response()->json($license);    
    }
}
