<?php

namespace App\Controllers;

use App\Controllers\BaseController;
use Config\Clients;
use App\Libraries\FacturacionElectronica;

class Tools extends BaseController
{
    public function index()
    {
        //
    }

    public function resendMail()
    {
        $clients = new Clients();
        return view('tools/tools_resend_mail_view', [
            'clients' => $clients->getAllClientsNames()
        ]);
    }

    public function goResendMail()
    {
        $rules = [
            'isc'            => 'required',
            'cod_generacion' => 'required|min_length[1]',
            'correo'         => 'required|valid_email',
        ];

        if (!$this->validate($rules)) {
            return $this->response
                ->setStatusCode(422)
                ->setJSON([
                    'success' => false,
                    'errors'  => $this->validator->getErrors(),
                ]);
        }

        $isc           = trim($this->request->getPost('isc'));
        $codGeneracion = trim($this->request->getPost('cod_generacion'));
        $correo        = trim(strtolower($this->request->getPost('correo')));
        $asunto        = trim($this->request->getPost('asunto') ?? '') ?: null;
        $mensaje       = trim($this->request->getPost('mensaje') ?? '') ?: null;

        //Obtener DTE
        try{
            $client = new Clients();
            $feEnv = $client->getFeEnv($isc);
            $facturacionElectronica = new FacturacionElectronica($feEnv);

            $dte = $facturacionElectronica->consultarDTE($codGeneracion);

            if(!$dte) {
                return $this->response
                    ->setStatusCode(404)
                    ->setJSON([
                        'success' => false,
                        'message' => 'DTE no encontrado para el código de generación proporcionado.',
                    ]);
            }   

            $dteJson = isset($dte['json']) ? $dte['json'] : null;
            if(!$dteJson) {
                return $this->response
                    ->setStatusCode(404)
                    ->setJSON([
                        'success' => false,
                        'message' => 'DTE no tiene información JSON disponible.',
                    ]);
            }

            $dteEstado = $dte['estado'];

            if($dteEstado !== 'PROCESADO') {
                return $this->response
                    ->setStatusCode(400)
                    ->setJSON([
                        'success' => false,
                        'message' => 'DTE no está en estado PROCESADO. Estado actual: ' . $dteEstado,
                    ]);
            }

            //Enviar correo
            $mailSender = $facturacionElectronica->enviarDTE(
                $dte, 
                $correo,
                $client->getOutbound($isc),
                [
                    'logo' => $client->getLogo($isc),
                    'comercial' => $client->getComercial($isc),
                    'nombre' => $client->getNombre($isc),
                    'telefono' => $client->getTelefono($isc),
                    'correo' => $client->getCorreo($isc)
                ]
            );

            if(!$mailSender['send']){
                return $this->response
                    ->setStatusCode(500)
                    ->setJSON([
                        'success' => false,
                        'message' => 'Error al enviar correo: ' . $mailSender['msg'],
                    ]);
            }

            return $this->response->setJSON([
                'success' => true,
                'message' => 'Correo enviado correctamente a: ' . $correo,
            ]);



        }
        catch(\Exception $e){
            return $this->response
                ->setStatusCode(500)
                ->setJSON([
                    'success' => false,
                    'message' => 'Error al enviar correo: ' . $e->getMessage(),
                ]);
        }


        return $this->response->setJSON([
            'success' => true,
            'data'    => compact('isc', 'codGeneracion', 'correo', 'asunto', 'mensaje'),
        ]);
    }
}
