<?php

namespace Alexr\Http\Controllers;

use Alexr\Settings\WhatsappTemplate;
use Alexr\Whatsapp\WhatsappManager;
use Evavel\Http\Controllers\Controller;
use Evavel\Http\Request\Request;

class WhatsappTemplatesController extends Controller
{
	/**
	 * Fetch templates from Twilio API with pagination
	 * Called from Vue to load templates page by page
	 *
	 * @param Request $request
	 * @return void
	 */
	public function fetchTemplates(Request $request)
	{
		$tenantId = $request->tenantId();
		$pageUrl = $request->page_url;
		$pageSize = $request->page_size;

		if (!$pageSize) { $pageSize = 50; }

		//ray('Controller - pageUrl:', $pageUrl);
		//ray('Controller - pageSize:', $pageSize);

		try {
			$manager = new WhatsappManager($tenantId);

			if (!$manager->isConfigured()) {
				wp_send_json_error([
					'error' => __eva('WhatsApp service is not configured. Please configure Twilio credentials in WhatsApp Configuration.'),
				]);
				return;
			}

			$result = $manager->getTemplates($pageSize, $pageUrl);


			if (!$result['success']) {
				wp_send_json_error([
					'error' => $result['message'],
				]);
				return;
			}

			wp_send_json_success([
				'templates' => $result['data']['templates'] ?? [],
				'meta' => $result['data']['meta'] ?? null,
				'total' => $result['data']['total'] ?? 0,
			]);

		} catch (\Exception $e) {
			wp_send_json_error([
				'error' => $e->getMessage(),
			]);
		}
	}

	/**
	 * Fetch a single template with full details (body, buttons, etc.)
	 *
	 * @param Request $request
	 * @return void
	 */
	public function fetchTemplate(Request $request)
	{
		$tenantId = $request->tenantId();
		$sid = $request->sid;

		if (empty($sid)) {
			wp_send_json_error([
				'error' => __eva('Template SID is required'),
			]);
			return;
		}

		try {
			// First check if we already have the template with body cached
			$cachedTemplate = WhatsappTemplate::getTemplateBySid($tenantId, $sid);

			/*if ($cachedTemplate && !empty($cachedTemplate['body'])) {
				wp_send_json_success([
					'template' => $cachedTemplate,
					'cached' => true,
				]);
				return;
			}*/

			// Fetch from Twilio
			$manager = new WhatsappManager($tenantId);

			if (!$manager->isConfigured()) {
				wp_send_json_error([
					'error' => __eva('WhatsApp service is not configured.'),
				]);
				return;
			}

			$result = $manager->getTemplate($sid);

			if (!$result['success']) {
				wp_send_json_error([
					'error' => $result['message'],
				]);
				return;
			}

			// Update the cached template with body info
			WhatsappTemplate::updateTemplate($tenantId, $sid, $result['data']);

			wp_send_json_success([
				'template' => $result['data'],
				'cached' => false,
			]);

		} catch (\Exception $e) {
			wp_send_json_error([
				'error' => $e->getMessage(),
			]);
		}
	}

	/**
	 * Save all templates to the database
	 *
	 * @param Request $request
	 * @return void
	 */
	public function saveTemplates(Request $request)
	{
		$tenantId = $request->tenantId();
		$templates = $request->templates;
		if (!$templates) {
			$templates = [];
		}

		try {
			$success = WhatsappTemplate::saveTemplates($tenantId, $templates);

			if ($success) {
				wp_send_json_success([
					'message' => __eva('Templates saved successfully'),
					'last_sync' => current_time('mysql'),
				]);
			} else {
				wp_send_json_error([
					'error' => __eva('Failed to save templates'),
				]);
			}

		} catch (\Exception $e) {
			wp_send_json_error([
				'error' => $e->getMessage(),
			]);
		}
	}

	/**
	 * Refresh templates - fetch all pages and save
	 * This is called when user clicks "Refresh" button
	 *
	 * @param Request $request
	 * @return void
	 */
	public function refreshTemplates(Request $request)
	{
		$tenantId = $request->tenantId();

		try {
			$manager = new WhatsappManager($tenantId);

			if (!$manager->isConfigured()) {
				wp_send_json_error([
					'error' => __eva('WhatsApp service is not configured.'),
				]);
				return;
			}

			// Use the getAllTemplates method if available, otherwise paginate manually
			if (method_exists($manager, 'getAllTemplates')) {
				$result = $manager->getAllTemplates(20);

				if (!$result['success']) {
					wp_send_json_error([
						'error' => $result['message'],
					]);
					return;
				}

				$allTemplates = $result['data']['templates'];
				$pageCount = $result['data']['pages_fetched'];
			} else {
				// Manual pagination fallback
				$allTemplates = [];
				$pageCount = 0;
				$nextPageUrl = null;
				$maxPages = 20;

				do {
					$result = $manager->getTemplates(50, $nextPageUrl);

					if (!$result['success']) {
						wp_send_json_error([
							'error' => $result['message'],
						]);
						return;
					}

					$allTemplates = array_merge($allTemplates, $result['data']['templates'] ?? []);
					$nextPageUrl = $result['data']['meta']['next_page_url'] ?? null;
					$pageCount++;

				} while ($nextPageUrl && $pageCount < $maxPages);
			}

			// Save all templates
			WhatsappTemplate::saveTemplates($tenantId, $allTemplates);

			wp_send_json_success([
				'templates' => $allTemplates,
				'count' => count($allTemplates),
				'pages_fetched' => $pageCount,
				'last_sync' => current_time('mysql'),
			]);

		} catch (\Exception $e) {
			wp_send_json_error([
				'error' => $e->getMessage(),
			]);
		}
	}

	/**
	 * Get template approval status from Twilio
	 *
	 * @param Request $request
	 * @return void
	 */
	public function getApprovalStatus(Request $request)
	{
		$tenantId = $request->tenantId();
		$sid = $request->sid;

		if (empty($sid)) {
			wp_send_json_error([
				'error' => __eva('Template SID is required'),
			]);
			return;
		}

		try {
			$manager = new WhatsappManager($tenantId);

			if (!$manager->isConfigured()) {
				wp_send_json_error([
					'error' => __eva('WhatsApp service is not configured.'),
				]);
				return;
			}

			$result = $manager->getTemplateApprovalStatus($sid);

			if (!$result['success']) {
				wp_send_json_error([
					'error' => $result['message'],
				]);
				return;
			}

			wp_send_json_success([
				'approval' => $result['data'],
			]);

		} catch (\Exception $e) {
			wp_send_json_error([
				'error' => $e->getMessage(),
			]);
		}
	}

	/**
	 * Send a test WhatsApp message using a template
	 *
	 * @param Request $request
	 * @return void
	 */
	public function sendTestMessage(Request $request)
	{
		$tenantId = $request->tenantId();
		$sid = $request->sid;
		$phone = $request->phone;
		$variables = $request->variables;

		//ray('sid', $sid, $phone, $variables, '');

		// Validate required fields
		if (empty($sid)) {
			wp_send_json_error([
				'error' => __eva('Template SID is required'),
			]);
			return;
		}

		if (empty($phone)) {
			wp_send_json_error([
				'error' => __eva('Phone number is required'),
			]);
			return;
		}

		// Clean phone number - remove spaces and ensure it has + prefix
		$phone = preg_replace('/\s+/', '', $phone);
		if (strpos($phone, '+') !== 0) {
			$phone = '+' . $phone;
		}

		try {
			$manager = new WhatsappManager($tenantId);

			if (!$manager->isConfigured()) {
				wp_send_json_error([
					'error' => __eva('WhatsApp service is not configured. Please configure Twilio credentials in WhatsApp Configuration.'),
				]);
				return;
			}

			// Send the message using the template
			$result = $manager->sendTemplate($phone, $sid, $variables);
			//$result = alexr_send_whatsapp_template($phone, $sid, $variables);


			if (!$result['success']) {
				wp_send_json_error([
					'error' => $result['message'],
				]);
				return;
			}

			wp_send_json_success([
				'message' => __eva('Test message sent successfully'),
				'message_sid' => $result['data']['message_sid'] ?? null,
			]);

		} catch (\Exception $e) {
			wp_send_json_error([
				'error' => $e->getMessage(),
			]);
		}
	}
}
