<?php
// Añadimos la librearía php de OpenPay
require (dirname(__FILE__) . '/../../../main/includes/librerias/openpay-php/Openpay.php');

//Inicializamos variables
$_POST = json_decode(file_get_contents('php://input'), true);
// echo json_encode($_POST);
// Variables del cliente
$nombre = $_POST['nombre'];
$apellidos = $_POST['apellidos'];
$telefono = $_POST['telefono'];
$email = $_POST['email'];
$domicilio = $_POST['domicilio'];
$curp = $_POST['curp'];
$cod_postal = $_POST['cod_postal'];
$fecha_nacimiento = empty($_POST['fecha_nacimiento']) ? '1969-01-01' : $_POST['fecha_nacimiento'];
$genero = $_POST['genero'];

// Datos del gimnasio
$sucursal = $_POST['sucursal'];
$centro = $_POST['centro'];
$db = $_POST['db'];

// Variables del plan
$paquete = $_POST['paquete'];
$concepto = $_POST['concepto'];
$nombre_concepto = $_POST['nombre_concepto'];
$precio_total = $_POST['total'];
$precio_ins = $_POST['precio_ins'];
$total = $precio_total + $precio_ins;


// Datos del token
$token = $_POST['token_id'];
$deviceSessionId = $_POST['deviceSessionId'];

// Datos Openpay
$openpay_id = $_POST['openpay_id'];
$private_key = $_POST['private_key'];

// Fechas
date_default_timezone_set("America/Mexico_City");
$hoy = date('Y-m-d G:i:s', time());
$fecha_fin = getVencimiento($hoy,$concepto);

//Iniciamos conexión a la base de datos
include("../../../mysql_connection/mysql_data.php");

$server_data = new serverData;
$servername = $server_data -> getServerName();
$username = $server_data -> getUserName();
$password = $server_data -> getPassword();

$conn = new mysqli($servername,$username,$password, $db);

/*$id_plan_openpay = getPlanOpenpayId($conn, $paquete);*/
$id_plan_openpay = $_POST['id_plan'];

$hoy = date('Y-m-d G:i:s', time());
$fecha_final = date("Y-m-d",strtotime($hoy."- 1 day"));

try {
	// Agregamos las keys para las librerís de 
    Openpay::setProductionMode(true);
	$openpay = Openpay::getInstance($openpay_id, $private_key);

    // Crear cliente en Openpay
	$customerData = array(
	     'name' => $nombre,
	     'last_name' => $apellidos,
	     'phone_number' => $telefono,
	     'email' => $email);
    $customer = $openpay->customers->add($customerData);
    // $customer->id;
    
    // Agregar tarjeta al cliente
    $cardDataRequest = array(
        'token_id' => $token,
        'device_session_id' => $deviceSessionId
        );
        
    $card = $customer->cards->add($cardDataRequest);
    
    // Creamos la suscripcion
    $subscriptionDataRequest = array(
    	    'trial_end_date' => $fecha_final,
    	    'plan_id' => $id_plan_openpay,
    	    'card_id' => $card->id);
    	    
    $subscription = $customer->subscriptions->add($subscriptionDataRequest);
    
    $fecha_cargo = $subscription->charge_date;
    
    // Posteriormente se hace el cargo a la inscripcion.
    $chargeRequest;
    $charge;
    if($total > 0){
        $chargeRequest = array(
		'method' => 'card',
		'source_id' => $card->id,
		'amount' => $total,
		'description' => "Inscripcion y suscrpicipon con costo de $".$total,		
		'device_session_id' => $deviceSessionId);
	
	    $charge = $customer->charges->create($chargeRequest);
    }
	
	$password_correo = substr( md5(microtime()), 1, 8);
    $password_bd = password_hash($password_correo, PASSWORD_BCRYPT);
    
    $consultaCrearCliente = "INSERT INTO 
    socios (Apellidos,Nombre,Clasificacion,Direccion,CodigoPostal,TelefonoFijo,TelefonoCelular,FechaNacimiento,Email,Email2,TipoCliente,Empresa,Puesto,TelefonoOficina,Codigo,Sexo,TipoSangre,Emergencia,CelularEmergencia,TelefonoEmergencia,EstadoCivil,Publicidad,Activo,FechaIngreso,Descuento,Deudas,Observaciones,RFC,ReferidoPor,ARecordar,ARecibo,AMasivo,ACrono,sucursal_idSucursal,Contrasena,token_qr,RUT) 
    VALUES ('$apellidos','$nombre','','$domicilio','$cod_postal','','$telefono','$fecha_nacimiento','$email','','','','','','','$genero','O-','','','',0,'',1,'$hoy',0,0,'','',null,1,1,1,1,$sucursal,'$password_bd','','$curp')";
    
    mysqli_query ($conn, $consultaCrearCliente);
    $NoCliente = mysqli_insert_id($conn);
    
    // Agregamos el cliente a la tabla de Openpay
    agregar_cliente_BD_Openpay($customer, $NoCliente,$openpay_id, $sucursal, $conn);
    
    // Agregamos la tarjeta a la tabla de Openpay
    agregar_tarjeta_BD_Openpay($card, $conn);
    
    // Agregamos la suscripcion
    agregar_suscripcion_BD_Openpay($subscription, $card->id, $openpay_id, $sucursal, $conn);
    
    // Agregamos la pagos
    if($precio_ins > 0)
    agregar_pago_BD_Openpay($charge, $id_plan_openpay, $subscription, $openpay_id, $sucursal, $customer->id,$conn);
    
    // Agregamos el pago a socio servicio
    $consultaSocioServicio = "INSERT INTO socio_servicio(idServicio,idSocio,idSocioTitular,FechaSolicitud,FechaInscripcion) 
    VALUES('$paquete','$NoCliente','$NoCliente',NOW(),'$fecha_fin');";  
    
    
    mysqli_query ($conn, $consultaSocioServicio);
    $idSocioServicio = mysqli_insert_id($conn);
    // echo 'id socio servicio: '.$idSocioServicio;
    /*$consultaPagos = "INSERT INTO pagos(idSocio_servicio,Concepto,FechaPago,Importe,idUsuario,FechaInicio,FechaFin,idSucursal,Visible,Cancelado,Pago,Subtotal,CargoExtra) 
    VALUES('$idSocioServicio','$concepto','$hoy','$precio_total','2','$hoy','$fecha_cargo','$sucursal','1','0','13','$precio_total','0');";*/
    $consultaPagos = "INSERT INTO pagos(idSocio_servicio,Concepto,FechaPago,Importe,idUsuario,FechaInicio,FechaFin,idSucursal,Visible,Cancelado,Pago,Subtotal,CargoExtra) 
    VALUES('$idSocioServicio','$concepto','$hoy','$total','2','$hoy','$fecha_fin','$sucursal','1','0','6','$total','0');";
    
    mysqli_query ($conn, $consultaPagos);
    
    $conn2 = new mysqli($servername,$username,$password, "direct18_ProGymCloud");
    $conn2 -> set_charset("utf8");
    
    $sucursal_nombre = get_sucursal_nombre($sucursal,$conn);
    
    send_mail($nombre, $centro, $NoCliente, $email, $password_correo, $sucursal_nombre, $conn2);
    
    echo json_encode(200);

} catch (OpenpayApiTransactionError $e) {
	echo json_encode('ERROR on the transaction: ' . $e->getMessage() . 
	      ' [error code: ' . $e->getErrorCode() . 
	      ', error category: ' . $e->getCategory() . 
	      ', HTTP code: '. $e->getHttpCode() . 
	      ', request ID: ' . $e->getRequestId() . ']', 0) ;

} catch (OpenpayApiRequestError $e) {
	echo json_encode('ERROR on the request: ' . $e->getMessage(), 0);

} catch (OpenpayApiConnectionError $e) {
	echo json_encode('ERROR while connecting to the API: ' . $e->getMessage(), 0);

} catch (OpenpayApiAuthError $e) {
	echo json_encode('ERROR on the authentication: ' . $e->getMessage(), 0);
	
} catch (OpenpayApiError $e) {
	echo json_encode('ERROR on the API: ' . $e->getMessage(), 0);
	
} catch (Exception $e) {
	echo json_encode('Error on the script: ' . $e->getMessage(), 0);
}
function getVencimiento($Fecha,$d){
    
    if($d==0)
        $d1 = date('Y-m-d', strtotime("+0 months", strtotime($Fecha)));
    else if($d==1)
        $d1 = date('Y-m-d', strtotime("+6 days", strtotime($Fecha)));
    else if($d==2)
        $d1 = date('Y-m-d', strtotime("+13 days", strtotime($Fecha)));
    else if($d==3)
        $d1 = date('Y-m-d', strtotime("+1 months", strtotime($Fecha)));
    else if($d==4)
        $d1 = date('Y-m-d', strtotime("+2 months", strtotime($Fecha)));
    else if($d==5)
        $d1 = date('Y-m-d', strtotime("+3 months", strtotime($Fecha)));
    else if($d==6)
        $d1 = date('Y-m-d', strtotime("+4 months", strtotime($Fecha)));
    else if($d==7)
        $d1 = date('Y-m-d', strtotime("+6 months", strtotime($Fecha)));
    else if($d==8)
        $d1 = date('Y-m-d', strtotime("+1 years", strtotime($Fecha)));
    else if($d==9)
        $d1 = date('Y-m-d', strtotime("-0 days", strtotime($Fecha)));
    else if($d == 97)
        $d1 = date('Y-m-d');
    else if($d == 98)
        $d1 = date('Y-m-d', strtotime("+1 months", strtotime($Fecha)));
    else if($d == 96)
        $d1 = date('Y-m-t', strtotime($Fecha));
    return $d1;
}

function getPlanOpenpayId($conn, $plan){
    $consulta = "select id_plan from suscripcion_openpay_planes  where idServicio = $plan";
    $result = mysqli_query($conn, $consulta);
    $total = mysqli_num_rows($result);
    
    $id= mysqli_fetch_assoc($result)['id_plan'];
    
    if($total < 1) return "";
    else return $id;
}

function agregar_cliente_BD_Openpay ($customer, $id_cliente, $id_openpay, $suc,$conn){
	$consulta = "INSERT INTO suscripcion_openpay_cliente values ('$customer->id','$customer->name', '$customer->email', '$id_cliente', '$suc', '$id_openpay')";
	$result = mysqli_query($conn, $consulta);
		
	// // Validamos si la consulta se ejecute correctamente, si no se ejecuta reotrnamos un mensaje de error.
	if (!$result){
	    echo json_encode("error en el registro en la base de datos del cliente.");
	    die();
	}
}

function agregar_tarjeta_BD_Openpay ($card, $conn){
    $consulta = "INSERT INTO `suscripcion_openpay_tarjetas` VALUES ('$card->id', '$card->holder_name', '$card->customer_id', '$card->card_number', '$card->expiration_month', '$card->expiration_year')";
	$result = mysqli_query($conn, $consulta);
	
	// Validamos si la consulta se ejecute correctamente, si no se ejecuta reotrnamos un mensaje de error.
	if (!$result){
	    echo json_encode("error en el registro en la base de datos de la tarjeta.");
	    die();
	}
	
}

function agregar_suscripcion_BD_Openpay ($sus, $id_tarjeta, $id_openpay, $suc, $conn){
    $consulta = "INSERT INTO `suscripcion_openpay_suscripciones` VALUES ('$sus->id', '$sus->customer_id', '$sus->plan_id', '$id_tarjeta', '$id_openpay', '$suc', '$sus->charge_date')";
    $result = mysqli_query($conn, $consulta);
	
	// Validamos si la consulta se ejecute correctamente, si no se ejecuta reotrnamos un mensaje de error.
	if (!$result){
	    echo json_encode("error en el registro en la base de datos de la suscripcion.");
	    die();
	} 
}

function agregar_pago_BD_Openpay ($charge, $plan, $sus, $id_openpay, $suc, $id_customer, $conn){
    $idPago = $charge->id;
    $description = $charge->description;
    $date = $charge->creation_date;
    $status = $charge->status;
    $amount = $charge->amount;
    $tarjeta = $charge->card->card_number;
    // $plan =substr($description, 40, -35) ;
    $fecha_final = $sus->charge_date;
            
    $consulta = "insert into suscripcion_openpay_pagos values('$idPago', '$description', '$date', '$status', '$amount', '$tarjeta','$id_openpay', '$suc', '$id_customer', '$plan')";
    $result = mysqli_query($conn, $consulta);
	
	// Validamos si la consulta se ejecute correctamente, si no se ejecuta reotrnamos un mensaje de error.
	if (!$result){
	    echo "error en el registro en la base de datos del pago.";  
	    die();
	} 
}

function send_mail($nombre, $gym_id, $id_cliente, $email, $password_correo, $sucursal_nombre, $conn){
    $consulta = "Select NombreGimnasio, clave_clientes FROM gimnasios WHERE idGimnasio = ".$gym_id;
    $result = mysqli_query($conn, $consulta);
    
    $data_gimnasio = mysqli_fetch_assoc($result);
    $nombreGym = $data_gimnasio['NombreGimnasio'];
    $mod_cli = $data_gimnasio['clave_clientes'];
    
    $from = "notificaciones@progymcloud.com";
    $subject = "¡Bienvenido a ".$nombreGym."!";
    $message = "¡Hola ".$nombre."!\n\n Recibimos tu solicitud para ser parte de nuestro servicio y tener acceso a tu portal de cliente y app móvil para ".$nombreGym.".\n \n Tus datos de acceso son los siguientes:\n\n Centro: ".$mod_cli." \n ID Cliente: ".$id_cliente." \n Contraseña: ".$password_correo."\n \n En el siguiente link podrás ingresar a tu portal de cliente: \n\n https://manager.progymcloud.com/clientes/ \n\nRecuerda cambiar tu contraseña una vez que hayas ingresado al portal/app móvil de clientes.\n\n¡Saludos! \n\n ".$nombreGym;
    
    $headers = "From: $from";
    $ok = @mail($email, $subject, $message, $headers, "-f " . $from);
    if($ok)
        return true;
    else
        return false;
    // **END
}

function get_sucursal_nombre ($suc, $conn){
    $consulta = "SELECT NombreSucursal FROM sucursal where idSucursal = '$suc';";
    $result = mysqli_query($conn, $consulta);
	
	// Validamos si la consulta se ejecute correctamente, si no se ejecuta reotrnamos un mensaje de error.
	if (!$result){
	    echo json_encode("error en el registro en la base de datos de la suscripcion.");
	    die();
	}else{
	    return mysqli_fetch_assoc($result)['NombreSucursal'];
	}
}
?>
