using Data; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Model; using Services.EmailSend; using Services.Interaces; using System.Text; namespace Web.Controllers { public class DemoRequestController : Controller { private readonly UserManager _userManager; private readonly SurveyContext _context; private readonly IEmailServices _emailService; public DemoRequestController(UserManager userManager, SurveyContext context, IEmailServices emailService) { _userManager = userManager; _context = context; _emailService = emailService; } // Danish Demo Endpoint [HttpPost] public async Task RequestDemo([FromBody] DemoRequest request) { return await CreateDemoAccount(request, "da"); } // English Demo Endpoint [HttpPost] public async Task RequestDemoEN([FromBody] DemoRequest request) { return await CreateDemoAccount(request, "en"); } // Shared logic for both languages private async Task CreateDemoAccount(DemoRequest request, string language) { try { // Validate email if (string.IsNullOrEmpty(request.Email)) { var errorMsg = language == "da" ? "Email er påkrævet" : "Email is required"; return Json(new { success = false, message = errorMsg }); } // Check if user already exists var existingUser = await _userManager.FindByEmailAsync(request.Email); if (existingUser != null) { var existsMsg = language == "da" ? "Email allerede i brug" : "Email already in use"; return Json(new { success = false, message = existsMsg }); } // Generate password string demoPassword = GeneratePassword(); // Create demo user var demoUser = new ApplicationUser { UserName = request.Email, Email = request.Email, EmailConfirmed = true, FirstName = "Demo", LastName = "User" }; // Create user var result = await _userManager.CreateAsync(demoUser, demoPassword); if (result.Succeeded) { // Assign Demo role await _userManager.AddToRoleAsync(demoUser, "Demo"); // Send email with credentials (language-specific) bool emailSent = await SendDemoCredentialsEmail(demoUser.Email, demoPassword, language); if (emailSent) { var successMsg = language == "da" ? "Demo konto oprettet! Check din email for login detaljer." : "Demo account created! Check your email for login details."; return Json(new { success = true, message = successMsg }); } else { var emailErrorMsg = language == "da" ? "Demo konto oprettet, men email kunne ikke sendes. Kontakt support." : "Demo account created, but email could not be sent. Please contact support."; return Json(new { success = true, message = emailErrorMsg }); } } else { var errors = string.Join(", ", result.Errors.Select(e => e.Description)); var userErrorMsg = language == "da" ? "Fejl ved oprettelse af bruger: " + errors : "Error creating user: " + errors; return Json(new { success = false, message = userErrorMsg }); } } catch (Exception ex) { var exceptionMsg = language == "da" ? "Fejl: " + ex.Message : "Error: " + ex.Message; return Json(new { success = false, message = exceptionMsg }); } } // Language-aware email sending private async Task SendDemoCredentialsEmail(string email, string password, string language) { if (language == "da") { return await SendDanishDemoEmail(email, password); } else { return await SendEnglishDemoEmail(email, password); } } // Danish email template private async Task SendDanishDemoEmail(string email, string password) { var subject = "🚀 Din A-Survey Demo Konto er Klar!"; var htmlBody = $@"

🎯 Velkommen til A-Survey Demo!

Din demo konto er klar til brug med fulde AI-funktioner

🔐 Login Detaljer

📧 Email: {email}

🔑 Adgangskode: {password}

📅 Demo Information:

  • Demo periode: 14 dage fra i dag
  • 🧠 AI-funktioner: Alle tilgængelige
  • 📊 Analytics: Komplet dashboard inkluderet
  • 📋 Surveys: Ubegrænset oprettelse
  • 🔄 Opgradering: Kan opgraderes til fuld version

💡 Kom Hurtigt i Gang:

  1. Klik på login linket ovenfor
  2. Indtast din email og adgangskode
  3. Udforsk de forudindlæste demo surveys
  4. Test AI-analyse funktionerne
  5. Opret dine egne surveys

Har du spørgsmål eller brug for hjælp?
Kontakt os på: info@seosoft.dk
Telefon: +45 61 77 73 36

"; try { var emailToSend = new EmailToSend(email, subject, htmlBody); return await _emailService.SendConfirmationEmailAsync(emailToSend); } catch (Exception ex) { return false; } } // English email template private async Task SendEnglishDemoEmail(string email, string password) { var subject = "🚀 Your A-Survey Demo Account is Ready!"; var htmlBody = $@"

🎯 Welcome to A-Survey Demo!

Your demo account is ready with full AI capabilities

🔐 Login Credentials

📧 Email: {email}

🔑 Password: {password}

📅 Demo Information:

  • Demo period: 14 days from today
  • 🧠 AI features: All available
  • 📊 Analytics: Complete dashboard included
  • 📋 Surveys: Unlimited creation
  • 🔄 Upgrade: Convert to full version anytime

💡 Quick Start Guide:

  1. Click the login button above
  2. Enter your email and password
  3. Explore the pre-loaded demo surveys
  4. Test the AI analysis features
  5. Create your own surveys

Questions or need help?
Contact us at: info@seosoft.dk
Phone: +45 61 77 73 36

"; try { var emailToSend = new EmailToSend(email, subject, htmlBody); return await _emailService.SendConfirmationEmailAsync(emailToSend); } catch (Exception ex) { return false; } } private string GeneratePassword() { var random = new Random(); // Ensure password meets all ASP.NET Identity requirements var digits = "0123456789"; var lowercase = "abcdefghijklmnopqrstuvwxyz"; var uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var special = "!@#$%"; // Guarantee at least one of each required type var password = new StringBuilder(); password.Append(digits[random.Next(digits.Length)]); // At least 1 digit password.Append(lowercase[random.Next(lowercase.Length)]); // At least 1 lowercase password.Append(uppercase[random.Next(uppercase.Length)]); // At least 1 uppercase password.Append(special[random.Next(special.Length)]); // At least 1 special char // Fill the rest with random characters var allChars = digits + lowercase + uppercase + special; for (int i = 0; i < 4; i++) // Add 4 more random chars { password.Append(allChars[random.Next(allChars.Length)]); } // Shuffle the password to randomize position of guaranteed chars var passwordArray = password.ToString().ToCharArray(); for (int i = passwordArray.Length - 1; i > 0; i--) { int j = random.Next(i + 1); (passwordArray[i], passwordArray[j]) = (passwordArray[j], passwordArray[i]); } return $"Demo{new string(passwordArray)}"; } } public class DemoRequest { public string Email { get; set; } } }