<?php
namespace App\Http\Controllers;

use App\Custom\SQLConnection;
use App\Custom\Misc;

use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Request;

use DateTime;
use DB;
use stdClass;

class EdictosController extends Controller {

    /**
     * Se obtiene los edictos donde el
     * nombre dado se encuentra
     * mencionado
     * @access public
     * @param string cadena armada para buscar en el store
     * @return array
     */
    public static function obtenerEdictosPorNombre($razon_social) {
        $herramientas_busqueda = self::armarTextoBusqueda($razon_social);
        //
        $edictos = SQLConnection::backendStoreProcedure('obtener_edictos_mencionado', array($herramientas_busqueda->texto_busqueda));
        //
        return $edictos;
    }

    /**
     * devuelve los edictos homonimos (sin cuit)
     * donde el nombre de la persona se 
     * encuentra asignado
     * @access public
     * @param string la razon social
     * @return array
     */
    public static function obtenerEdictosHomonimos($razon_social) {
        $herramientas_busqueda = self::armarTextoBusqueda($razon_social);
        // BUSCA EDICTOS HOMÓNIMOS POR NOMBRE Y CUIT Y LOS JUNTA EN UN SOLO ARRAY
        $edictos = SQLConnection::obtenerEdictosHomonimos($herramientas_busqueda->texto_busqueda);
        //
        // Resaltar los resultados
        if ($edictos) {
            $edictos = Misc::ResaltarResultadosEdictosHomonimosNombresAnt($edictos, $herramientas_busqueda->combinaciones);
        }
        //
        return $edictos;
    }

    /**
     * Funcion que asigna
     * el edicto homonimo a
     * una empresa
     * @access public
     * @return string
     */
    public static function asignarHomonimo() {
        $cuit = Request::input('cuit');
        $lista_id = Request::input('lista_id');
        //
        if ($lista_id[strlen($lista_id) - 1] == ',') {
            $lista_id = substr($lista_id, 0, strlen($lista_id) - 1);
        }
        //
        SQLConnection::backendStoreProcedure('backend_asigna_cuit_edictos_homonimos', array('asignar', $cuit, $lista_id, 'sociedades_constituciones', 'sociedad'), 'selectOne');
        //
        return Response::JSON(['error' => 0, 'mensaje' => 'OK']);
    }

    /**
     * Funcion que desasigna
     * el edicto de una
     * empresa
     * @access public
     * @return string
     */
    public static function desasignarEmpresa() {
        $lista_id = Request::input('lista_id');
        //
        if (is_null($lista_id) || empty($lista_id)) {
            return Response::JSON(['error' => 1, 'mensaje' => 'No se recibio el id del edicto.']);
        }
        //
        if ($lista_id[strlen($lista_id) - 1] == ',') {
            $lista_id = substr($lista_id, 0, strlen($lista_id) - 1);
        }
        //
        SQLConnection::backendStoreProcedure('backend_asigna_cuit_edictos_homonimos', array('desasignar', NULL, $lista_id, 'sociedades_constituciones', 'sociedad'), 'selectOne');
        //
        return Response::JSON(['error' => 0, 'mensaje' => 'OK']);
    }

    /////////////////////////////////////////////////
    ///////////// FUNCIONES AUXILIARES //////////////
    /////////////////////////////////////////////////

    /**
     * Funcion que arma el texto de busqueda
     * y las combinaciones
     * @access private
     * @param string el nombre a buscar
     * @return object objeto que contiene el texto de busqueda y arreglo de combinaciones
     */
    private static function armarTextoBusqueda($razon_social, $tipo_persona = 'F') {
        //
        $razon_social_explode = explode(" ", $razon_social);
        $razon_social_explode = array_values($razon_social_explode);
        $resultado_razon_social = Misc::resultadoCombinaciones($razon_social_explode);
        //Limita a 10 resultados las combinaciones en PF
        $resultado_razon_social = array_slice($resultado_razon_social, -10);
        $cant_resultado_razon_social = count($resultado_razon_social);
        $razon_social_completa = '';
        //
        /* if ( $cant_resultado_razon_social < 10 ){
            foreach ( $resultado_razon_social as $key => $rs ){
                if ( !(end($resultado_razon_social) == $rs) ){
                    $razon_social_completa .= 'NEAR(('.str_replace(" ",",",$rs).'),0,true) OR ';
                } else {
                    $razon_social_completa .= 'NEAR(('.str_replace(" ",",",$rs).'),0,true)';
                }
            }
        } else {
            $razon_social_completa = "\"".$razon_social."\"";
        } */
        foreach ($resultado_razon_social as $key => $rs) {
            if (!(end($resultado_razon_social) == $rs)) {
                $razon_social_completa .= 'NEAR((' . str_replace(" ", ",", $rs) . '),0,true) OR ';
            } else {
                $razon_social_completa .= 'NEAR((' . str_replace(" ", ",", $rs) . '),0,true)';
            }
        }
        //
        if ($tipo_persona == 'J') {
            $sinonimos = Misc::diccionarioSinonimosTEST($resultado_razon_social);
            $count_sinonimo = count($sinonimos) - 1;
            //
            foreach ($sinonimos as $key => $rs) {
                if (!($key == $count_sinonimo)) {
                    $razon_social_completa .= $rs . 'OR';
                } else {
                    $razon_social_completa .= $rs;
                }
            }
        }
        // devuelve
        $response = new stdClass;
        $response->texto_busqueda = $razon_social_completa;
        $response->combinaciones = $resultado_razon_social;
        //
        return $response;
    }
}