# inventory-backend/app/api/v1/inbound/product.py
from flask import Blueprint, request, jsonify
from app.services.inbound.product_service import ProductInboundService
import traceback

inbound_product_bp = Blueprint('stock_product', __name__)


# ------------------------------------------------------------------
# 0. 基础物料搜索 (关键接口：配合 Service 实现自动回填)
# ------------------------------------------------------------------
@inbound_product_bp.route('/search-base', methods=['GET'])
def search_base():
    """
    对应前端 API: /inbound/product/search-base
    功能: 模糊搜索基础物料，返回 spec, unit, category, type 等详细信息
    """
    try:
        keyword = request.args.get('keyword', '')
        # 调用 Service 层已修复的 search_base_material 方法
        data = ProductInboundService.search_base_material(keyword)
        return jsonify({"code": 200, "msg": "success", "data": data})
    except Exception as e:
        # 捕获异常并打印堆栈，方便调试
        traceback.print_exc()
        return jsonify({"code": 500, "msg": str(e)}), 500


# ------------------------------------------------------------------
# 1. 获取列表 (支持 status 多选筛选)
# ------------------------------------------------------------------
@inbound_product_bp.route('/list', methods=['GET'])
def get_list():
    try:
        page = request.args.get('page', 1, type=int)
        limit = request.args.get('pageSize', 15, type=int)
        keyword = request.args.get('keyword', '')

        # 接收状态参数 (逗号分隔字符串 -> 列表)
        statuses_str = request.args.get('statuses', '')
        statuses = statuses_str.split(',') if statuses_str else []

        result = ProductInboundService.get_list(page, limit, keyword, statuses)
        return jsonify({"code": 200, "msg": "success", "data": result})
    except Exception as e:
        traceback.print_exc()
        return jsonify({"code": 500, "msg": str(e)}), 500


# ------------------------------------------------------------------
# 2. 新增入库
# ------------------------------------------------------------------
@inbound_product_bp.route('/submit', methods=['POST'])
def submit():
    try:
        # 调用 Service 处理入库，获取新创建的对象
        new_stock = ProductInboundService.handle_inbound(request.get_json())

        # 返回成功信息以及新创建的数据（包含生成的ID和SKU），供前端自动打印使用
        return jsonify({
            "code": 200,
            "msg": "入库成功",
            "data": new_stock.to_dict()
        })
    except Exception as e:
        traceback.print_exc()
        return jsonify({"code": 500, "msg": str(e)}), 500


# ------------------------------------------------------------------
# 3. 更新入库
# ------------------------------------------------------------------
@inbound_product_bp.route('/<int:id>', methods=['PUT'])
def update(id):
    try:
        ProductInboundService.update_inbound(id, request.get_json())
        return jsonify({"code": 200, "msg": "更新成功"})
    except Exception as e:
        traceback.print_exc()
        return jsonify({"code": 500, "msg": str(e)}), 500


# ------------------------------------------------------------------
# 4. 删除
# ------------------------------------------------------------------
@inbound_product_bp.route('/<int:id>', methods=['DELETE'])
def delete(id):
    try:
        ProductInboundService.delete_inbound(id)
        return jsonify({"code": 200, "msg": "删除成功"})
    except Exception as e:
        traceback.print_exc()
        return jsonify({"code": 500, "msg": str(e)}), 500


# ------------------------------------------------------------------
# 5. 获取出库历史
# ------------------------------------------------------------------
@inbound_product_bp.route('/<int:id>/history', methods=['GET'])
def get_history(id):
    try:
        data = ProductInboundService.get_outbound_history(id)
        return jsonify({"code": 200, "msg": "success", "data": data})
    except Exception as e:
        traceback.print_exc()
        return jsonify({"code": 500, "msg": str(e)}), 500