Elementor #4628

import React, { useState, useEffect } from 'react'; // Main App component const App = () => { // State for currency conversion const [amount, setAmount] = useState(''); const [fromCurrency, setFromCurrency] = useState('EUR'); const [toCurrency, setToCurrency] = useState('MXN'); const [convertedAmount, setConvertedAmount] = useState(0); // State for Gemini API feature: what to buy/do const [geminiBuyResponse, setGeminiBuyResponse] = useState(''); const [loadingGeminiBuy, setLoadingGeminiBuy] = useState(false); // State for Gemini API feature: places to visit const [geminiVisitResponse, setGeminiVisitResponse] = useState(''); const [loadingGeminiVisit, setLoadingGeminiVisit] = useState(false); // Fixed commission rate const COMMISSION_RATE = 0.013; // 1.3% // Exchange rates (approximate, hardcoded for demonstration) // In a real app, these would come from an API const exchangeRates = { EUR: { USD: 1.08, MXN: 19.90, EUR: 1, // For same currency conversion }, USD: { EUR: 0.92, MXN: 18.40, USD: 1, }, MXN: { EUR: 0.050, USD: 0.054, MXN: 1, }, }; // Function to calculate the conversion const calculateConversion = () => { const inputAmount = parseFloat(amount); if (isNaN(inputAmount) || inputAmount <= 0) { setConvertedAmount(0); return; } // Get the base rate let rate = exchangeRates[fromCurrency][toCurrency]; // Apply commission const amountAfterCommission = inputAmount * (1 - COMMISSION_RATE); const result = amountAfterCommission * rate; setConvertedAmount(result.toFixed(2)); // Round to 2 decimal places }; // Recalculate whenever amount, fromCurrency, or toCurrency changes useEffect(() => { calculateConversion(); }, [amount, fromCurrency, toCurrency]); // Function to handle currency swap const swapCurrencies = () => { setFromCurrency(toCurrency); setToCurrency(fromCurrency); }; // Function to call Gemini API for suggestions on what to buy/do const handleGeminiBuySuggestion = async () => { if (parseFloat(convertedAmount) <= 0) { setGeminiBuyResponse('Por favor, ingresa un monto válido para obtener sugerencias.'); return; } setLoadingGeminiBuy(true); setGeminiBuyResponse(''); // Clear previous response const prompt = `Dado ${convertedAmount} ${toCurrency}, sugiere 3-5 artículos o experiencias típicas que un turista podría comprar o hacer en Madrid. Sé conciso y céntrate en categorías de gasto comunes para turistas como comida, souvenirs, transporte o actividades pequeñas. Responde en español.`; let chatHistory = []; chatHistory.push({ role: "user", parts: [{ text: prompt }] }); const payload = { contents: chatHistory }; const apiKey = ""; // Leave as-is for Canvas to provide the key const apiUrl = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${apiKey}`; try { const response = await fetch(apiUrl, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }); const result = await response.json(); if (result.candidates && result.candidates.length > 0 && result.candidates[0].content && result.candidates[0].content.parts && result.candidates[0].content.parts.length > 0) { const text = result.candidates[0].content.parts[0].text; setGeminiBuyResponse(text); } else { setGeminiBuyResponse('No se pudieron generar sugerencias en este momento. Inténtalo de nuevo.'); } } catch (error) { console.error('Error calling Gemini API for buy suggestions:', error); setGeminiBuyResponse('Ocurrió un error al conectar con el servicio de IA. Por favor, inténtalo más tarde.'); } finally { setLoadingGeminiBuy(false); } }; // Function to call Gemini API for suggestions on places to visit const handleGeminiVisitSuggestion = async () => { if (parseFloat(convertedAmount) <= 0) { setGeminiVisitResponse('Por favor, ingresa un monto válido para obtener sugerencias de lugares.'); return; } setLoadingGeminiVisit(true); setGeminiVisitResponse(''); // Clear previous response const prompt = `Dado que tengo ${convertedAmount} ${toCurrency}, sugiere 3-5 lugares o actividades turísticas en Madrid que podría visitar o realizar con este presupuesto. Sé conciso y céntrate en opciones de bajo a medio costo. Responde en español.`; let chatHistory = []; chatHistory.push({ role: "user", parts: [{ text: prompt }] }); const payload = { contents: chatHistory }; const apiKey = ""; // Leave as-is for Canvas to provide the key const apiUrl = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${apiKey}`; try { const response = await fetch(apiUrl, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }); const result = await response.json(); if (result.candidates && result.candidates.length > 0 && result.candidates[0].content && result.candidates[0].content.parts && result.candidates[0].content.parts.length > 0) { const text = result.candidates[0].content.parts[0].text; setGeminiVisitResponse(text); } else { setGeminiVisitResponse('No se pudieron generar sugerencias de lugares en este momento. Inténtalo de nuevo.'); } } catch (error) { console.error('Error calling Gemini API for visit suggestions:', error); setGeminiVisitResponse('Ocurrió un error al conectar con el servicio de IA. Por favor, inténtalo más tarde.'); } finally { setLoadingGeminiVisit(false); } }; return (
{/* App Title */}

MiExchangeLATAM

{/* Currency Exchange Calculator Section */}

Calculadora de Cambio de Divisas

{/* Amount Input */}
setAmount(e.target.value)} />
{/* From Currency Dropdown */}
{/* Swap Button */}
{/* To Currency Dropdown */}
{/* Result Display */}

Recibirás aproximadamente:

{convertedAmount} {toCurrency}

Comisión aplicada: {(COMMISSION_RATE * 100).toFixed(1)}%

{/* Gemini API Feature Section: What to Buy/Do */}

Explora Madrid con tu Dinero

¿Curioso sobre qué puedes hacer o comprar con el dinero que acabas de cambiar?

{geminiBuyResponse && (

Ideas para ti:

{geminiBuyResponse}

)}
{/* Gemini API Feature Section: Places to Visit */}

Lugares para Visitar en Madrid

¿Buscas inspiración para tus paseos por Madrid?

{geminiVisitResponse && (

Explora estos sitios:

{geminiVisitResponse}

)}
{/* Location Map Section */}

Nuestra Ubicación

{/* Google Maps iframe for Plaza Mayor, Madrid */} {/* Using a static map URL for simplicity and no API key requirement */}

Encuéntranos en Plaza Mayor, Madrid. ¡Te esperamos!

{/* Contact and Benefits Section */}

Contáctanos y Beneficios

{/* Contact Number */}

Número de contacto: +34 91 XXX XX XX

{/* WhatsApp Button */} WhatsApp {/* Money Transfer Info */}

Transferencias de Dinero en Persona

Ofrecemos un servicio de transferencias de dinero rápido y seguro. Puedes enviar y recibir dinero en nuestra sucursal física con total confianza.

{/* Benefits List */}

Beneficios de Usar MiExchangeLATAM:

  • Buena Tasa de Cambio: Competitivas tasas para que obtengas más por tu dinero.
  • Atención en Español: Personal amable y bilingüe para tu comodidad.
  • Seguridad y Confianza: Tus transacciones están protegidas.
  • Rapidez: Transacciones eficientes para que no pierdas tiempo.
{/* Footer */}

© 2025 MiExchangeLATAM. Todos los derechos reservados.

); }; export default App;