<?php 
/** Script para la creación de un usuario nuevo
 *  Los usuarios vienen reflejados con la tabla USUARIOS
 *  No se devuelve nada. Si la consulta falla se controla con excepciones. 
 */
session_start();
$usuarioSession = $_SESSION['USUARIO'];

include('../lg/config_vo.php');
include('../includes/conex.php');
include('../includes/eat.php');
include('../class/Schema.php');

$cookieUser = filter_input(INPUT_COOKIE, 'usuario') ?? null; 
$cookieIdioma = filter_input(INPUT_COOKIE, 'idioma') ?? null; 
if((!isset($usuarioSession) || $_SESSION['AWA_SESION_ID'] != $awa_id) || (isset($cookieUser) && $cookieUser != $staticUsu )){
    eatCookies();
    header('Location:../index.php');
}
empty($cookieIdioma)?
    include('../lg/LG_' . $cookieIdioma . '.php'):
    include('../lg/LG_SP.php');

$username    = filter_input(INPUT_POST, 'username') ?? null;
$login       = filter_input(INPUT_POST, 'login') ?? null;
$password    = sha1(filter_input(INPUT_POST, 'pass')) ?? null;
$email       = filter_input(INPUT_POST, 'email') ?? null;
$codigoperfil= (int)filter_input(INPUT_POST, 'codperfil') ?? null;
$currdate =  date("Y-m-d");
$currdatecont =  date("Y-m-d H:i:s");//Current date para contactos
try{
    if ($username === null || $login === null || $password === null || $email === null || $codigoperfil === null   ) { throw new Exception("Es obligatorio rellenar todos los campos");}
    
    //Compruebo si el login introducido ya está siendo utilizado
    $query = "SELECT count(*) as REPETIDOS FROM USUARIOS WHERE USUARIO LIKE '".$login."'";
    $loginrepetido = $con->query($query)->fetch_assoc();
    if ((int)$loginrepetido["REPETIDOS"] >= 1 ) { throw new Exception("Ese login ya está asignado otro usuario, has de emplear otro nombre");}
    
    /*Se verifica si el email ya está siendo utilizado en otro contacto. 
    Diferentes CONTACTOS pueden utilizar mismo email provocado por haber cedido a algun cliente el email.
    Se toma el codigo mas bajo que consideraremos el original. No deberían compartirse emails*/ 
    $query = "SELECT CONTACTOS.EMAIL1, CONTACTOS.CODIGO FROM CONTACTOS WHERE CONTACTOS.EMAIL1 = '". trim($email) ."' ORDER BY CODIGO LIMIT 1";
    $contactoexistente = $con->query($query)->fetch_assoc();
    if ($contactoexistente){
        /* Busco por si el contacto encontrado ya está vinculado a un usuario*/
        $query = "SELECT COUNT(*) as COUNT FROM USUARIOS WHERE USUARIOS.CONTACTO = '". $contactoexistente['CODIGO'] ."'";
        $usuariorepetido = $con->query($query)->fetch_assoc();
        if ((int)$usuariorepetido["COUNT"] >= 1 ) { throw new Exception(" El email introducido corresponde al contacto ".$contactoexistente['CODIGO']." que tiene ya asignado un usuario, por favor utilice un email maximo para cada usuario.");}
        
        /*Si existe el contacto (y no está asociado a otro usuario) asignamos el codigo del contacto al nuevo usuario */
        $contacto = (int)$contactoexistente['CODIGO'];
        $querycontacto = "INSERT INTO USUARIOS (USUARIO, CLAVE, NOMBRE, MOSTRAR, VISIBLE, ALTA, ACTIVO, GRUPO, CORREO, CONTACTO ) VALUES ( ? , ? , ? , ? , 1, ?, 1, ?, ?, ? )";
        $stmt = $con->prepare($querycontacto);
        $stmt->bind_param('sssssisi', $login, $password, $username, $username, $currdate, $codigoperfil, $email, $contacto );
        $stmt->execute();
        
    }else{//No tiene contacto asociado, por tanto hay que crear tanto contacto como el usuario
        //Se crea nuevo CONTACTO
        $querymaxcod = "SELECT MAX(CODIGO) as MAXCOD FROM CONTACTOS";
        $codnuevocontacto = (int)$con->query($querymaxcod)->fetch_assoc()["MAXCOD"] +1 ;
        $queryinscont = "INSERT INTO CONTACTOS (CODIGO, USUARIO, NOMBRE, MOSTRAR, ACTIVO, ALTA, EMAIL1 ) VALUES ( ? , ? , ? , ?, 1, ?, ? )";
        $stmt = $con->prepare($queryinscont);
        $stmt->bind_param('isssss', $codnuevocontacto, $usuarioSession, $username, $username, $currdatecont, $email );
        $stmt->execute();

        //Se crea nuevo USUARIO usando codigo de contacto recién creado
        $query3 = "INSERT INTO USUARIOS (USUARIO, CLAVE, NOMBRE, MOSTRAR, VISIBLE, ALTA, ACTIVO, GRUPO, CORREO, CONTACTO ) VALUES ( ? , ? , ? , ? , 1, ?, 1, ?, ?, ? )";
        $stmt2 = $con->prepare($query3);
        $stmt2->bind_param('sssssisi', $login, $password, $username, $username, $currdate, $codigoperfil, $email, $codnuevocontacto );
        $stmt2->execute();
    }
    
} catch (Exception $ex) {
    $error = "exc_".$ex->getMessage();
    $error .= ($username === null)  ? "\nEl nombre de usuario está vacío": "";
    $error .= ($login === null)     ? "\nEl login está vacío": "";
    $error .= ($password === null)  ? "\nLa contraseña está vacía": "";
    $error .= ($email === null)     ? "\nEl email está vacío": "";
    $error .= ($email === null)     ? "\nNo se ha aportado un email válido": "";
    echo $error;
} catch (Throwable $twb) {
    echo "twb_".$twb->getMessage();echo "\nEn linea ".$twb->getLine();
} finally {
        echo "Login del nuevo usuario: $login \n";
        if (!empty($contactoexistente)){  var_dump($contactoexistente);}
        if (!empty($usuariorepetido)){ echo "UsuarioRepetido"; var_dump($usuariorepetido);}
        if (!empty($codnuevocontacto)){ echo "Codigo del nuevo contacto: $codnuevocontacto \n";}
    $con->close();
    return;
}
