def METHOD_NAME(  # noqa: C901
    self, labware_id: str, num_tips: int, starting_tip_name: Optional[str]
) -> Optional[str]:
    """Get the next available clean tip."""
    wells = self._state.tips_by_labware_id.get(labware_id, {})
    columns = self._state.column_by_labware_id.get(labware_id, [])
    if columns and num_tips == len(columns[0]):
        column_head = [column[0] for column in columns]
        starting_column_index = 0
        if starting_tip_name:
            for idx, column in enumerate(columns):
                if starting_tip_name in column:
                    if starting_tip_name not in column_head:
                        starting_column_index = idx + 1
                    else:
                        starting_column_index = idx
        for column in columns[starting_column_index:]:
            if not any(wells[well] == TipRackWellState.USED for well in column):
                return column[0]
    elif num_tips == len(wells.keys()):
        if starting_tip_name and starting_tip_name != columns[0][0]:
            return None
        if not any(
            tip_state == TipRackWellState.USED for tip_state in wells.values()
        ):
            return next(iter(wells))
    else:
        for well_name, tip_state in wells.items():
            seen_start = (
                starting_tip_name is None
                or well_name == starting_tip_name
                or wells[starting_tip_name] == TipRackWellState.USED
            )
            if seen_start and tip_state == TipRackWellState.CLEAN:
                return well_name
    return None