```python
from typing import List, Tuple

def build_prefix_sum_table(grid: List[List[int]]) -> List[List[int]]:
    rows = len(grid)
    cols = len(grid[0])
    
    # Initialize prefix sum table with zeros
    prefix_sum = [[0 for _ in range(cols + 1)] for _ in range(rows + 1)]
    
    for i in range(1, rows + 1):
        for j in range(1, cols + 1):
            prefix_sum[i][j] = (prefix_sum[i - 1][j]
                             + prefix_sum[i][j - 1]
                             - prefix_sum[i - 1][j - 1]
                             + grid[i - 1][j - 1])
    
    return prefix_sum

def region_totals(grid: List[List[int]], queries: List[Tuple[int, int, int, int]]) -> List[int]:
    if not grid or not grid[0] or any(len(row) != len(grid[0]) for row in grid):
        raise ValueError("Grid must have at least one row and all rows must have the same length.")
    
    prefix_sum = build_prefix_sum_table(grid)
    
    totals = []
    for query in queries:
        top, left, bottom, right = query
        
        if not (0 <= top < bottom <= len(grid) and 0 <= left < right <= len(grid[0])):
            raise ValueError("Query boundaries are out of grid range.")
        
        if len(query) != 4 or any(not isinstance(i, int) for i in query):
            raise ValueError("Each query must be a list of exactly four integers.")
        
        if top >= bottom or left >= right:
            raise ValueError("Query's top should be strictly less than its bottom and left should be strictly less than its right.")
        
        total = (prefix_sum[bottom][right]
                 - prefix_sum[top][right]
                 - prefix_sum[bottom][left]
                 + prefix_sum[top][left])
        
        totals.append(total)
    
    return totals
```