<?php

namespace App\Services\Paga;

use App\Models\MetodoPagamento;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;

class SegrestaWallet
{
    public function __construct(){

    }

    private function isUtenteAutenticato(MetodoPagamento $metodo_pagamento){

        $segrestaWallet = (object) $metodo_pagamento->info;
        $segrestaWallet->url = $metodo_pagamento->path_img;
        $segrestaWallet->email = $metodo_pagamento->key;
        $segrestaWallet->password = $metodo_pagamento->secret;
        $segrestaWallet->user_isAuth = $metodo_pagamento->info['user_isAuth']??false;
        $segrestaWallet->user_id = $metodo_pagamento->info['user_id']??null;
        $segrestaWallet->api_token = $metodo_pagamento->info['api_token']??null;

        // dd('segrestaWallet' , $segrestaWallet);

        if($segrestaWallet->user_isAuth && $segrestaWallet->api_token !== null){
            return [
                'success' => true, 
                'message' => 'Utente autenticato', 
                'user_id' => $segrestaWallet->user_id, 
                'api_token' => $segrestaWallet->api_token
            ];

        }else{
            // dd('segrestaWallet' , $segrestaWallet);
            $url = 'https://'.$segrestaWallet->url.'/api/v2/login';
            try{
            $response = Http::timeout(10)->retry(3)->withHeaders(['Content-Type' => 'application/json'])->post($url, [
                'email' => $segrestaWallet->email,
                'password' => $segrestaWallet->password,
            ]);
            }catch(\Exception $e){
                return [
                    'success' => false,
                    'message' => $e->getMessage(),
                ];
            }
            // dd('response' , $response->json()['result']);

            if($response->json()['result']){
                
                $segrestaWallet->user_isAuth = true;
                $segrestaWallet->user_id = $response->json()['user']['id']??null;
                $segrestaWallet->api_token = $response->json()['user']['api_token']??null;

                $metodo_pagamento->update(['info' => [
                    'user_isAuth' => true,
                    'user_id' => $segrestaWallet->user_id,
                    'api_token' => $segrestaWallet->api_token
                ]]);
                $metodo_pagamento->save();

                return [
                    'success' => true, 
                    'message' => 'Utente autenticato', 
                    'user_id' => $segrestaWallet->user_id, 
                    'api_token' => $segrestaWallet->api_token
                ];
            }elseif($response->json()['result'] === false){
                return ['success' => false, 'message' => $response->json()['message']];
            }
            return ['success' => false, 'message' => 'Errore sconosciuto'];
        }
    }



    public function registraMovimento($pagamento, $tipo_operazione, $importo, $descrizione, $tag_id = null){
        
        $url = 'https://'.$pagamento->metodo_pagamento->path_img.'/api/v2/operazione_bar/registraMovimento';
        
        $segrestaWalletAuth = $this->isUtenteAutenticato($pagamento->metodo_pagamento);
        
        if($segrestaWalletAuth['success'] === false){
            return [
                'result' => false,
                'message' => $segrestaWalletAuth['message'],
            ];
        }

        if($segrestaWalletAuth['success'] && $segrestaWalletAuth['api_token'] !== null){
            try{
            $response = Http::timeout(10)->retry(3)->withHeaders(['Content-Type' => 'application/json'])->withToken($segrestaWalletAuth['api_token'])->post($url, [
                // 'user_id' => $segrestaWalletAuth['user_id'],
                'tag_id' => $tag_id, // tag_id è il tag NFC letto dal braccialetto del cliente.
                'tipo_operazione' => $tipo_operazione,
                'importo' => $importo,
                'descrizione' => $descrizione,
            ]);
            }catch(\Exception $e){
                return [
                    'result' => false,
                    'message' => $e->getMessage(),
                ];
            }
        
        return [
            'result' => $response->json()['result'],
            'message' => $response->json()['message'],
        ];
        }else{
            return [
                'result' => false,
                'message' => 'Utente non autenticato',
            ];
        }
    }


    public function chiE($tag_id){
        if(!$tag_id){
            return [
                'result' => false,
                'message' => 'Tag ID obbligatorio',
            ];
        }
        if(MetodoPagamento::where('tipo', MetodoPagamento::SEGRESTA_WALLET)->where('is_attivo', true)->count() == 1){
            $metodoPagamento = MetodoPagamento::where('tipo', MetodoPagamento::SEGRESTA_WALLET)->where('is_attivo', true)->first();
        }else{
            return [
                'result' => false,
                'message' => 'Metodo Pagamento non trovato',
            ];
        }

        $url = 'https://'.$metodoPagamento->path_img.'/api/v2/user/chiE';
        $segrestaWalletAuth = $this->isUtenteAutenticato($metodoPagamento);


        // dd($segrestaWalletAuth);

        if($segrestaWalletAuth['success'] === false){
            return [
                'result' => false,
                'message' => $segrestaWalletAuth['message'],
            ];
        }
        if($segrestaWalletAuth['success'] && $segrestaWalletAuth['api_token'] !== null){
            try{
                // dd($url, $segrestaWalletAuth['api_token']);
            $response = Http::timeout(10)
            ->retry(3)
            ->withHeaders(['Content-Type' => 'application/json'])
            ->withToken($segrestaWalletAuth['api_token'])
            ->post($url, [
                'tag_id' => $tag_id,
            ]);
            }catch(\Exception $e){
                return [
                    'result' => false,
                    'message' => $e->getMessage(),
                ];
            }
            return [
                'result' => $response->json()['result'],
                'message' => $response->json()['message'],
            ];
        }
    }
        // public function checkCredito(Request $request){
    //     $url = $this->url.'/api/v2/operazione_bar/checkCredito';

    //     if($this->user_isAuth && $this->api_token !== null){
    //         $response = Http::post($url, [
    //             'api_token' => $this->api_token,
    //             'user_id' => $this->user_id,
    //             'tag_id' => $request->tag_id,
    //         ]);
    //     }elseif($this->authUser()['success']){
    //         $response = Http::post($url, [
    //             'api_token' => $this->api_token,
    //             'user_id' => $this->user_id,
    //             'tag_id' => $request->tag_id,
    //         ]);
    //     }

    //     return $response->json();

    // }
}