using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Authorization; using SkyArtShop.Models; using SkyArtShop.Services; namespace SkyArtShop.Controllers { [Route("admin/menu")] [Authorize(Roles = "Admin")] public class AdminMenuController : Controller { private readonly MongoDBService _mongoService; public AdminMenuController(MongoDBService mongoService) { _mongoService = mongoService; } [HttpGet("")] public async Task Index() { var menuItems = await _mongoService.GetAllAsync("MenuItems"); return View(menuItems.OrderBy(m => m.DisplayOrder).ToList()); } [HttpPost("reseed")] public async Task ReseedMenu() { // Delete all existing menu items var existingItems = await _mongoService.GetAllAsync("MenuItems"); foreach (var item in existingItems) { await _mongoService.DeleteAsync("MenuItems", item.Id!); } // Add new menu items var defaultMenuItems = new[] { new MenuItem { Label = "Home", Url = "/", DisplayOrder = 1, IsActive = true, ShowInNavbar = true, ShowInDropdown = true }, new MenuItem { Label = "Shop", Url = "/Shop", DisplayOrder = 2, IsActive = true, ShowInNavbar = true, ShowInDropdown = true }, new MenuItem { Label = "Top Sellers", Url = "/#top-sellers", DisplayOrder = 3, IsActive = true, ShowInNavbar = true, ShowInDropdown = true }, new MenuItem { Label = "Promotion", Url = "/#promotion", DisplayOrder = 4, IsActive = true, ShowInNavbar = true, ShowInDropdown = true }, new MenuItem { Label = "Portfolio", Url = "/Portfolio", DisplayOrder = 5, IsActive = true, ShowInNavbar = true, ShowInDropdown = true }, new MenuItem { Label = "Blog", Url = "/Blog", DisplayOrder = 6, IsActive = true, ShowInNavbar = true, ShowInDropdown = true }, new MenuItem { Label = "About", Url = "/About", DisplayOrder = 7, IsActive = true, ShowInNavbar = true, ShowInDropdown = true }, new MenuItem { Label = "Instagram", Url = "#instagram", DisplayOrder = 8, IsActive = true, ShowInNavbar = false, ShowInDropdown = true }, new MenuItem { Label = "Contact", Url = "/Contact", DisplayOrder = 9, IsActive = true, ShowInNavbar = true, ShowInDropdown = true }, new MenuItem { Label = "My Wishlist", Url = "#wishlist", DisplayOrder = 10, IsActive = true, ShowInNavbar = false, ShowInDropdown = true } }; foreach (var item in defaultMenuItems) { await _mongoService.InsertAsync("MenuItems", item); } TempData["SuccessMessage"] = "Menu items reseeded successfully!"; return RedirectToAction("Index"); } [HttpGet("create")] public IActionResult Create() { return View(new MenuItem()); } [HttpPost("create")] public async Task Create(MenuItem menuItem) { if (!ModelState.IsValid) { return View(menuItem); } menuItem.CreatedAt = DateTime.UtcNow; await _mongoService.InsertAsync("MenuItems", menuItem); TempData["SuccessMessage"] = "Menu item created successfully!"; return RedirectToAction("Index"); } [HttpGet("edit/{id}")] public async Task Edit(string id) { var menuItem = await _mongoService.GetByIdAsync("MenuItems", id); if (menuItem == null) { return NotFound(); } return View(menuItem); } [HttpPost("edit/{id}")] public async Task Edit(string id, MenuItem menuItem) { if (!ModelState.IsValid) { return View(menuItem); } menuItem.Id = id; await _mongoService.UpdateAsync("MenuItems", id, menuItem); TempData["SuccessMessage"] = "Menu item updated successfully!"; return RedirectToAction("Index"); } [HttpPost("delete/{id}")] public async Task Delete(string id) { await _mongoService.DeleteAsync("MenuItems", id); TempData["SuccessMessage"] = "Menu item deleted successfully!"; return RedirectToAction("Index"); } } }