<?php
/**
 * Obtención de datos de conversación desde la API de Compibot.
 *
 * Este archivo contiene la función que obtiene los datos de conversación del chat de Compibot,
 * realizando una solicitud a la API y formateando los datos según la zona horaria configurada.
 *
 * @package Compibot
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly.
}

/**
 * Obtiene la conversación del chat desde la API de Compibot.
 *
 * Esta función realiza una solicitud a la API, procesa los datos JSON recibidos y los formatea
 * para que se muestren correctamente con la zona horaria configurada en WordPress.
 *
 * @param string $token            Token de autenticación del usuario.
 * @param int    $intervalo_tiempo Intervalo de tiempo en minutos para filtrar las conversaciones.
 * @param int    $num_pagina       Número de la página solicitada.
 * @param string $order_array      Criterio de ordenación de la conversación.
 * @return array Datos de la conversación, incluyendo total de páginas y addons.
 */
function compibot_get_chat_conversation( $token, $intervalo_tiempo = 43200, $num_pagina = 1, $order_array = 'start_chatting_at' ) {

	// TODO: Añadir método de ordenación y enviarlo a Django para su correcto filtrado.

	// Mapeamos los intervalos de tiempo a minutos.
	$intervalos = array(
		'15 minutos'       => 15,
		'30 minutos'       => 30,
		'ultima hora'      => 60,
		'ultimas 2 horas'  => 120,
		'ultimas 6 horas'  => 360,
		'ultimas 12 horas' => 720,
		'ultimo dia'       => 1440,
		'ultimos 2 dias'   => 2880,
		'ultima semana'    => 10080,
		'ultimo mes'       => 43200,
		'ultimo año'       => 525600,
	);

	// Obtenemos el intervalo en minutos o usar un valor por defecto.
	$minutos = isset( $intervalos[ $intervalo_tiempo ] ) ? $intervalos[ $intervalo_tiempo ] : 43200;

	$url = 'https://panel.compibot.com/api/get-chat-data/';

	// TODO: Cambiar el num_pagina por el valor que se reciba al invocar la función.
	$args = array(
		'headers' => array(
			'Authorization' => 'Bearer ' . $token,
			'Content-Type'  => 'application/json',
		),
		'body'    => wp_json_encode(
			array(
				'intervalo_tiempo' => $minutos,
				'num_pagina'       => $num_pagina,
				'order_by'         => $order_array,
			)
		),
		'method'  => 'POST',
	);

	// Realizamos la solicitud GET.
	$response = wp_remote_post( $url, $args );
	// Verificamos si hubo algún error en la solicitud.
	if ( is_wp_error( $response ) ) {
		return array( 'error' => 'Error al obtener los datos de la conversación.' );
	}

	// Obtenemos el cuerpo de la respuesta.
	$body = wp_remote_retrieve_body( $response );

	// Convertir la respuesta JSON a un array asociativo.
	$data = json_decode( $body, true );

	// Verificar si la conversación fue exitosa.
	// Verificar si la conversión fue exitosa.
	if ( json_last_error() !== JSON_ERROR_NONE ) {
		return array( 'error' => 'Error al decodificar los datos JSON.' );
	}

	$gmt_offset = get_option( 'gmt_offset' );
	if ( $gmt_offset ) {
		$gmt_offset = floatval( $gmt_offset );
	} else {
		$gmt_offset = 0;
	}

	if ( isset( $data['conversations'] ) && is_array( $data['conversations'] ) ) {
		foreach ( $data['conversations'] as $index => $conversation ) {
			// Cambiar el formato de 'start_chatting_at' y se le suma el UTC configurado en WordPress.
			$data['conversations'][ $index ]['start_chatting_at'] = gmdate( 'd/m/Y - H:i', strtotime( $conversation['start_chatting_at'] ) + $gmt_offset * 3600 );

			// Recorrer cada interacción y cambiar el formato de las fechas.
			foreach ( $conversation['conversation'] as $i => $interaction ) {
				$data['conversations'][ $index ]['conversation'][ $i ]['user_msg_time'] = gmdate( 'd/m/Y - H:i', strtotime( $interaction['user_msg_time'] ) + $gmt_offset * 3600 );
				$data['conversations'][ $index ]['conversation'][ $i ]['bot_msg_time']  = gmdate( 'd/m/Y - H:i', strtotime( $interaction['bot_msg_time'] ) + $gmt_offset * 3600 );
			}
		}
	}

	// Obtenemos el número máximo de chatters.
	// Arreglo del error - Warning: Undefined array key "max_chatters".
	$max_chatters = isset( $data['max_chatters'] ) ? $data['max_chatters'] : 0;

	// Máximo numero de elementos por páginas.
	$max_elements = 10;

	// Número total de páginas.
	$total_pages = ceil( $max_chatters / $max_elements );

	if ( $total_pages < 1 ) {
		$total_pages = 1;
	} elseif ( $total_pages > 1 ) {
		$total_pages = ceil( $total_pages );
	}

	// Arreglo del error - Warning: Undefined array key "addons".
	$addons = isset( $data['addons'] ) ? $data['addons'] : array();

	unset( $data['addons'] );
	// Retornar los datos de la conversación.
	return array(
		'data'        => $data,
		'total_pages' => $total_pages,
		'addons'      => $addons,
	);
}
