package com.luozhihui.project.controller;
import com.luozhihui.project.common.ApiResponse;
import com.luozhihui.project.common.totalResponse;
import com.luozhihui.project.entity.Order;
import com.luozhihui.project.mapper.OrderShowMapper;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@RestController
@RequestMapping("/api")
@CrossOrigin
public class OrderShowController {
    @Resource
    OrderShowMapper orderShowMapper;
//    定义响应体
    //查询所有订单信息
    @PostMapping("/AllOrder")
    public ApiResponse AllCar() {
        try {
            // 查询所有订单
            List<Order> order = orderShowMapper.FindAllOrder();
            if (order != null) {
                return new ApiResponse(order, 200, "查询成功");
            } else {
                return new ApiResponse(null, 404, "未找到订单"); // 如果未找到订单，返回适当的状态码和消息
            }
        } catch (Exception e) {
            e.printStackTrace();
            return new ApiResponse(null, 500, "服务器内部错误"); // 捕获任何异常并返回服务器内部错误
        }
    }
    @CrossOrigin
    //查询所有订单信息
    @PostMapping("/getorder")
    public ApiResponse OrderTotal() {
        try {
            // 查询所有订单
            List<Order> order = orderShowMapper.GetOrder();
            if (order != null) {
                return new ApiResponse(order, 200, "查询成功");
            } else {
                return new ApiResponse(null, 404, "未找到车辆"); // 如果未找到订单，返回适当的状态码和消息
            }
        } catch (Exception e) {
            e.printStackTrace();
            return new ApiResponse(null, 500, "服务器内部错误"); // 捕获任何异常并返回服务器内部错误
        }
    }
    @CrossOrigin
    @PostMapping("/delete_order")
    public ApiResponse delete_order(@RequestBody Map<String, Object> requestBody) {
        try {
            String orderIdsParam = (String) requestBody.get("orderIds");
            // 将逗号分隔的字符串orderIdsParam拆分为orderId列表
            List<String> orderIdStrings = Arrays.asList(orderIdsParam.split(","));
            List<Long> orderIds = orderIdStrings.stream().map(Long::parseLong).collect(Collectors.toList());

            int deletedCount = 0;
            for (Long orderId : orderIds) {
                boolean isDeleted = orderShowMapper.DeleteOrderById(String.valueOf(orderId));
                if (isDeleted) {
                    deletedCount++;
                }
            }
            if (deletedCount == orderIds.size()) {
                return new ApiResponse(null, 200, "删除成功");
            } else if (deletedCount == 0) {
                return new ApiResponse(null, 404, "未找到订单信息");
            } else {
                return new ApiResponse(null, 207, "部分订单删除成功"); // 207 - Partial Content
            }
        } catch (Exception e) {
            e.printStackTrace();
            return new ApiResponse(null, 500, "服务器内部错误");
        }
    }


    //通过userid查询信息
//    @PostMapping("/FindOrderById")
//    public ApiResponse FindCarById(Order order) {
//        try {
//            // 查询所有车辆
//            List<Order> orders = orderShowMapper.FindOrderById(order.getUserId());
//
//            if (orders != null && !orders.isEmpty()) {
//                return new ApiResponse(orders, 200, "查询成功");
//            } else {
//                return new ApiResponse(null, 404, "未找到订单"); // 如果未找到订单，返回适当的状态码和消息
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//            return new ApiResponse(null, 500, "服务器内部错误"); // 捕获任何异常并返回服务器内部错误
//        }
//    }
//    @PostMapping("/FindOrderById")
//    public ApiResponse findOrderById(Order order) {
//        try {
//            if (order == null || order.getUserId() == null) {
//                return new ApiResponse(null, 400, "订单信息不完整");
//            }
//
//            // 查询所有订单
//            List<Order> orders = orderShowMapper.FindOrderById(order.getUserId());
//
//            if (orders != null && !orders.isEmpty()) {
//                // 获取当前服务器默认时区
//                ZoneId zoneId = ZoneId.systemDefault();
//
//                // 遍历订单列表，将日期时间数据转换为用户本地时区的时间
//                for (Order o : orders) {
//                    // 将入库时间转换为用户本地时区时间
//                    if (o.getInTime() != null) {
//                        LocalDateTime inTime = o.getInTime().atZone(zoneId).toLocalDateTime();
//                        o.setInTime(inTime);
//                    }
//
//                    // 将出库时间转换为用户本地时区时间
//                    if (o.getOutTime() != null) {
//                        LocalDateTime outTime = o.getOutTime().atZone(zoneId).toLocalDateTime();
//                        o.setOutTime(outTime);
//                    }
//                }
//                return new ApiResponse(orders, 200, "查询成功");
//            } else {
//                return new ApiResponse(null, 404, "未找到订单"); // 如果未找到订单，返回适当的状态码和消息
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//            return new ApiResponse(null, 500, "服务器内部错误"); // 捕获任何异常并返回服务器内部错误
//        }
//    }
    @PostMapping("/FindOrderById")
    public totalResponse findOrderById(@RequestParam Integer userId, @RequestParam int pageNumber, @RequestParam int pageSize) {
        try {
            if (userId == null) {
                return new totalResponse(null, 400, "订单信息不完整",null);
            }

            // 分页查询所有订单
            List<Order> orders = orderShowMapper.findOrdersByUserId(userId, (pageNumber - 1) * pageSize, pageSize);
            int total = orderShowMapper.countOrdersByUserId(String.valueOf(userId)); // 获取总订单数
            if (orders != null && !orders.isEmpty()) {
                // 获取当前服务器默认时区
                ZoneId zoneId = ZoneId.systemDefault();

                // 遍历订单列表，将日期时间数据转换为用户本地时区的时间
                for (Order o : orders) {
                    // 将入库时间转换为用户本地时区时间
                    if (o.getInTime() != null) {
                        LocalDateTime inTime = o.getInTime().atZone(zoneId).toLocalDateTime();
                        o.setInTime(inTime);
                    }

                    // 将出库时间转换为用户本地时区时间
                    if (o.getOutTime() != null) {
                        LocalDateTime outTime = o.getOutTime().atZone(zoneId).toLocalDateTime();
                        o.setOutTime(outTime);
                    }
                }
                return new totalResponse(orders, 200, "查询成功",total);
            } else {
                return new totalResponse(null, 404, "未找到订单",null); // 如果未找到订单，返回适当的状态码和消息
            }
        } catch (Exception e) {
            e.printStackTrace();
            return new totalResponse(null, 500, "服务器内部错误",null); // 捕获任何异常并返回服务器内部错误
        }
    }
    @CrossOrigin
    //更新订单信息
    @PostMapping("/uporderinfo")
    public ApiResponse updateOrder(@RequestBody Order order) {
        try {
            int orderId = Integer.parseInt(order.getOrderId());
            System.out.println(orderId);

            Order existingOrderinfo =orderShowMapper.OrderId(orderId); // Assuming FindRepairById returns a single Repair object
            System.out.println(existingOrderinfo);
            if (existingOrderinfo != null) {
                // 更新订单费用
                existingOrderinfo.setOrderMoney(order.getOrderMoney());
                // 更新状态
                existingOrderinfo.setOrderStatus(order.getOrderStatus());
                orderShowMapper.update(existingOrderinfo);
                return new ApiResponse(null, 200, "订单信息更新成功");
            } else {
                return new ApiResponse(null, 404, "订单不存在");
            }
        } catch (Exception e) {
            return new ApiResponse(e.getMessage(), 500, "更新车辆信息发生异常");
        }
    }

}
