AdminOrderController.java

package com.ctrlbuy.webshop.controller;

import com.ctrlbuy.webshop.entity.Order;
import com.ctrlbuy.webshop.service.OrderService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@Controller
@RequestMapping("/admin")
public class AdminOrderController {

    private static final Logger logger = LoggerFactory.getLogger(AdminOrderController.class);

    @Autowired
    private OrderService orderService;

    @GetMapping("/orders")
    public String adminOrders(Model model) {
        try {
            logger.info("Hämtar alla orders för admin");
            List<Order> orders = orderService.getAllOrders();
            model.addAttribute("orders", orders);

            // Calculate total revenue safely
            double totalRevenue = orders.stream()
                    .filter(order -> order.getTotalAmount() != null)
                    .mapToDouble(Order::getTotalAmount)
                    .sum();

            model.addAttribute("totalRevenue", totalRevenue);
            model.addAttribute("totalOrders", orders.size());

            logger.info("Admin orders: {} orders, total revenue: {} kr", orders.size(), totalRevenue);
            return "admin/orders";
        } catch (Exception e) {
            logger.error("Fel vid hämtning av admin orders", e);
            model.addAttribute("error", "Ett fel uppstod vid hämtning av beställningar");
            model.addAttribute("orders", new ArrayList<>());
            model.addAttribute("totalRevenue", 0.0);
            model.addAttribute("totalOrders", 0);
            return "admin/orders";
        }
    }

    // 🔧 TEMPORÄR TESTMETOD - TA BORT EFTER FELSÖKNING
    @GetMapping("/orders/test")
    public String testOrders(Model model) {
        logger.info("TEST: Temporär orders test-metod");
        model.addAttribute("orders", new ArrayList<>());
        model.addAttribute("totalRevenue", 0.0);
        model.addAttribute("totalOrders", 0);
        model.addAttribute("message", "TEST: Template fungerar - huvudmetoden har problem");
        return "admin/orders";
    }

    @GetMapping("/orders/{id}")
    public String viewOrder(@PathVariable Long id, Model model) {
        try {
            logger.info("Hämtar order med ID: {}", id);
            Order order = orderService.getOrderById(id);
            if (order == null) {
                logger.warn("Order med ID {} hittades inte", id);
                model.addAttribute("error", "Beställning hittades inte");
                return "redirect:/admin/orders";
            }
            model.addAttribute("order", order);
            logger.info("Order {} hittades för admin", order.getOrderNumber());
            return "admin/order-details";
        } catch (Exception e) {
            logger.error("Fel vid hämtning av order med ID: {}", id, e);
            model.addAttribute("error", "Ett fel uppstod vid hämtning av beställning");
            return "redirect:/admin/orders";
        }
    }

    @PostMapping("/orders/{id}/status")
    public String updateOrderStatus(@PathVariable Long id, @RequestParam String status) {
        try {
            logger.info("Uppdaterar order {} status till: {}", id, status);
            orderService.updateOrderStatus(id, status);
            logger.info("Order {} status uppdaterad till: {}", id, status);
            return "redirect:/admin/orders/" + id;
        } catch (Exception e) {
            logger.error("Fel vid uppdatering av order {} status", id, e);
            return "redirect:/admin/orders";
        }
    }

    // 🔧 EXTRA DEBUG METOD
    @GetMapping("/orders/debug")
    @ResponseBody
    public String debugOrders() {
        try {
            List<Order> orders = orderService.getAllOrders();
            return "DEBUG: Hittade " + orders.size() + " orders i databasen. " +
                    "OrderService fungerar korrekt. Problem är troligen i template.";
        } catch (Exception e) {
            return "DEBUG ERROR: " + e.getMessage() + " - Problem i OrderService eller databas.";
        }
    }
}