UserOrderController.java

package com.ctrlbuy.webshop.controller;

import com.ctrlbuy.webshop.entity.Order;
import com.ctrlbuy.webshop.security.entity.User;
import com.ctrlbuy.webshop.service.OrderService;
import com.ctrlbuy.webshop.service.UserService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Optional;

/**
 * UserOrderController - Förenklad version med endast befintliga metoder
 * ✅ ANVÄNDER ENDAST: getOrdersByUserId() och findById()
 */
@Controller
@RequestMapping("/orders")
@RequiredArgsConstructor
@Slf4j
public class UserOrderController {

    private final OrderService orderService;
    private final UserService userService;

    /**
     * Visa användarens beställningar - FÖRENKLAD
     */
    @GetMapping
    public String viewUserOrders(Authentication authentication, Model model) {

        try {
            // Kontrollera om användaren är inloggad
            if (authentication == null || !authentication.isAuthenticated()) {
                log.warn("Oanvändare försöker komma åt beställningar");
                return "redirect:/login";
            }

            // Hämta användaren
            String username = authentication.getName();
            Optional<User> userOpt = userService.findByUsername(username);

            if (userOpt.isEmpty()) {
                log.error("Användare inte hittad: {}", username);
                return "redirect:/login";
            }

            User user = userOpt.get();
            log.info("Hämtar beställningar för användare: {}", username);

            // Hämta användarens beställningar
            List<Order> userOrders = orderService.getOrdersByUserId(user.getId());

            log.info("Hittade {} beställningar för användare {}", userOrders.size(), username);

            // Lägg till data till modellen
            model.addAttribute("orders", userOrders);
            model.addAttribute("totalElements", userOrders.size());
            model.addAttribute("user", user);

            return "orders";

        } catch (Exception e) {
            log.error("Fel vid hämtning av beställningar: ", e);
            model.addAttribute("error", "Kunde inte hämta beställningar");
            return "orders";
        }
    }

    /**
     * Visa detaljer för en specifik beställning - FÖRENKLAD
     */
    @GetMapping("/{orderId}")
    public String viewOrderDetails(@PathVariable Long orderId,
                                   Authentication authentication,
                                   Model model) {

        try {
            // Kontrollera om användaren är inloggad
            if (authentication == null || !authentication.isAuthenticated()) {
                return "redirect:/login";
            }

            // Hämta användaren
            String username = authentication.getName();
            Optional<User> userOpt = userService.findByUsername(username);

            if (userOpt.isEmpty()) {
                return "redirect:/login";
            }

            User user = userOpt.get();

            // Hämta beställningen
            Order order = orderService.findById(orderId);

            if (order == null) {
                log.warn("Beställning inte hittad: {}", orderId);
                model.addAttribute("error", "Beställningen kunde inte hittas");
                return "orders";
            }

            // Kontrollera att beställningen tillhör användaren
            if (!order.getUserId().equals(user.getId())) {
                log.warn("Användare {} försöker komma åt order {} som inte tillhör dem",
                        username, orderId);
                model.addAttribute("error", "Du har inte behörighet att se denna beställning");
                return "orders";
            }

            // Lägg till data till modellen
            model.addAttribute("order", order);
            model.addAttribute("user", user);

            return "order-details";

        } catch (Exception e) {
            log.error("Fel vid hämtning av beställningsdetaljer: ", e);
            model.addAttribute("error", "Kunde inte hämta beställningsdetaljer");
            return "orders";
        }
    }
}