from unilabos.resources.warehouse import WareHouse, warehouse_factory

# ================ 反应站相关堆栈 ================

def bioyond_warehouse_1x4x4(name: str) -> WareHouse:
    """创建BioYond 4x4x1仓库 (左侧堆栈: A01～D04)

    使用行优先排序，前端展示为:
    A01 | A02 | A03 | A04
    B01 | B02 | B03 | B04
    C01 | C02 | C03 | C04
    D01 | D02 | D03 | D04
    """
    return warehouse_factory(
        name=name,
        num_items_x=4,  # 4列
        num_items_y=4,  # 4行
        num_items_z=1,
        dx=10.0,
        dy=10.0,
        dz=10.0,
        item_dx=147.0,
        item_dy=106.0,
        item_dz=130.0,
        category="warehouse",
        col_offset=0,  # 从01开始: A01, A02, A03, A04
        layout="row-major",  # ⭐ 改为行优先排序
    )

def bioyond_warehouse_1x4x4_right(name: str) -> WareHouse:
    """创建BioYond 4x4x1仓库 (右侧堆栈: A05～D08)"""
    return warehouse_factory(
        name=name,
        num_items_x=4,
        num_items_y=4,
        num_items_z=1,
        dx=10.0,
        dy=10.0,
        dz=10.0,
        item_dx=147.0,
        item_dy=106.0,
        item_dz=130.0,
        category="warehouse",
        col_offset=4,  # 从05开始: A05, A06, A07, A08
        layout="row-major",  # ⭐ 改为行优先排序
    )

def bioyond_warehouse_density_vial(name: str) -> WareHouse:
    """创建测量小瓶仓库(测密度) A01～B03"""
    return warehouse_factory(
        name=name,
        num_items_x=3,  # 3列（01-03）
        num_items_y=2,  # 2行（A-B）
        num_items_z=1,  # 1层
        dx=10.0,
        dy=10.0,
        dz=10.0,
        item_dx=40.0,
        item_dy=40.0,
        item_dz=50.0,
        # 用更小的 resource_size 来表现 "小点的孔位"
        resource_size_x=30.0,
        resource_size_y=30.0,
        resource_size_z=12.0,
        category="warehouse",
        col_offset=0,
        layout="row-major",
    )

def bioyond_warehouse_reagent_storage(name: str) -> WareHouse:
    """创建BioYond站内试剂存放堆栈（A01～A02, 1行×2列）"""
    return warehouse_factory(
        name=name,
        num_items_x=2,  # 2列（01-02）
        num_items_y=1,  # 1行（A）
        num_items_z=1,  # 1层
        dx=10.0,
        dy=10.0,
        dz=10.0,
        item_dx=137.0,
        item_dy=96.0,
        item_dz=120.0,
        category="warehouse",
    )

def bioyond_warehouse_tipbox_storage(name: str) -> WareHouse:
    """创建BioYond站内Tip盒堆栈（A01～B03），用于存放枪头盒"""
    return warehouse_factory(
        name=name,
        num_items_x=3,  # 3列（01-03）
        num_items_y=2,  # 2行（A-B）
        num_items_z=1,  # 1层
        dx=10.0,
        dy=10.0,
        dz=10.0,
        item_dx=137.0,
        item_dy=96.0,
        item_dz=120.0,
        category="warehouse",
        col_offset=0,
        layout="row-major",
    )

def bioyond_warehouse_liquid_preparation(name: str) -> WareHouse:
    """已弃用,创建BioYond移液站内10%分装液体准备仓库（A01～B04）"""
    return warehouse_factory(
        name=name,
        num_items_x=4,  # 4列（01-04）
        num_items_y=2,  # 2行（A-B）
        num_items_z=1,  # 1层
        dx=10.0,
        dy=10.0,
        dz=10.0,
        item_dx=137.0,
        item_dy=96.0,
        item_dz=120.0,
        category="warehouse",
        col_offset=0,
        layout="row-major",
    )

# ================ 配液站相关堆栈 ================

def bioyond_warehouse_reagent_stack(name: str) -> WareHouse:
    """创建BioYond 试剂堆栈 2x4x1 (2行×4列: A01-A04, B01-B04)

    使用行优先排序，前端展示为:
    A01 | A02 | A03 | A04
    B01 | B02 | B03 | B04
    """
    return warehouse_factory(
        name=name,
        num_items_x=4,  # 4列 (01-04)
        num_items_y=2,  # 2行 (A-B)
        num_items_z=1,  # 1层
        dx=10.0,
        dy=10.0,
        dz=10.0,
        item_dx=147.0,
        item_dy=106.0,
        item_dz=130.0,
        category="warehouse",
        col_offset=0,  # 从01开始
        layout="row-major",  # ⭐ 使用行优先排序: A01,A02,A03,A04, B01,B02,B03,B04
    )

 # 定义bioyond的堆栈

# =================== Other ===================

def bioyond_warehouse_1x4x2(name: str) -> WareHouse:
    """创建BioYond 4x2x1仓库"""
    return warehouse_factory(
        name=name,
        num_items_x=1,
        num_items_y=4,
        num_items_z=2,
        dx=10.0,
        dy=10.0,
        dz=10.0,
        item_dx=137.0,
        item_dy=96.0,
        item_dz=120.0,
        category="warehouse",
        removed_positions=None
    )

def bioyond_warehouse_1x2x2(name: str) -> WareHouse:
    """创建BioYond 1x2x2仓库"""
    return warehouse_factory(
        name=name,
        num_items_x=1,
        num_items_y=2,
        num_items_z=2,
        dx=10.0,
        dy=10.0,
        dz=10.0,
        item_dx=137.0,
        item_dy=96.0,
        item_dz=120.0,
        category="warehouse",
    )

def bioyond_warehouse_10x1x1(name: str) -> WareHouse:
    """创建BioYond 10x1x1仓库"""
    return warehouse_factory(
        name=name,
        num_items_x=10,
        num_items_y=1,
        num_items_z=1,
        dx=10.0,
        dy=10.0,
        dz=10.0,
        item_dx=137.0,
        item_dy=96.0,
        item_dz=120.0,
        category="warehouse",
    )

def bioyond_warehouse_1x3x3(name: str) -> WareHouse:
    """创建BioYond 1x3x3仓库"""
    return warehouse_factory(
        name=name,
        num_items_x=1,
        num_items_y=3,
        num_items_z=3,
        dx=10.0,
        dy=10.0,
        dz=10.0,
        item_dx=137.0,
        item_dy=96.0,
        item_dz=120.0,
        category="warehouse",
    )

def bioyond_warehouse_2x1x3(name: str) -> WareHouse:
    """创建BioYond 2x1x3仓库"""
    return warehouse_factory(
        name=name,
        num_items_x=2,
        num_items_y=1,
        num_items_z=3,
        dx=10.0,
        dy=10.0,
        dz=10.0,
        item_dx=137.0,
        item_dy=96.0,
        item_dz=120.0,
        category="warehouse",
    )

def bioyond_warehouse_3x3x1(name: str) -> WareHouse:
    """创建BioYond 3x3x1仓库"""
    return warehouse_factory(
        name=name,
        num_items_x=3,
        num_items_y=3,
        num_items_z=1,
        dx=10.0,
        dy=10.0,
        dz=10.0,
        item_dx=137.0,
        item_dy=96.0,
        item_dz=120.0,
        category="warehouse",
    )

def bioyond_warehouse_5x1x1(name: str) -> WareHouse:
    """已弃用：创建BioYond 5x1x1仓库"""
    return warehouse_factory(
        name=name,
        num_items_x=5,
        num_items_y=1,
        num_items_z=1,
        dx=10.0,
        dy=10.0,
        dz=10.0,
        item_dx=137.0,
        item_dy=96.0,
        item_dz=120.0,
        category="warehouse",
    )

def bioyond_warehouse_3x3x1_2(name: str) -> WareHouse:
    """已弃用：创建BioYond 3x3x1仓库"""
    return warehouse_factory(
        name=name,
        num_items_x=3,
        num_items_y=3,
        num_items_z=1,
        dx=12.0,
        dy=12.0,
        dz=12.0,
        item_dx=137.0,
        item_dy=96.0,
        item_dz=120.0,
        category="warehouse",
    )

def bioyond_warehouse_liquid_and_lid_handling(name: str) -> WareHouse:
    """创建BioYond开关盖加液模块台面"""
    return warehouse_factory(
        name=name,
        num_items_x=2,
        num_items_y=5,
        num_items_z=1,
        dx=10.0,
        dy=10.0,
        dz=10.0,
        item_dx=137.0,
        item_dy=96.0,
        item_dz=120.0,
        category="warehouse",
        removed_positions=None
    )

def bioyond_warehouse_1x8x4(name: str) -> WareHouse:
    """创建BioYond 8x4x1反应站堆栈（A01～D08）"""
    return warehouse_factory(
        name=name,
        num_items_x=8,  # 8列（01-08）
        num_items_y=4,  # 4行（A-D）
        num_items_z=1,  # 1层
        dx=10.0,
        dy=10.0,
        dz=10.0,
        item_dx=147.0,
        item_dy=106.0,
        item_dz=130.0,
        category="warehouse",
    )
