## Step 1: Define the variables and the objective function
Let's define the variables as follows:
- $x_1$ = number of waiters
- $x_2$ = number of cooks

The objective is to minimize the weekly wage bill. The wage for waiters is $147 per week, and for cooks, it is $290 per week. Therefore, the objective function to minimize is $147x_1 + 290x_2$.

## Step 2: Define the constraints
1. The total number of staff must be at least 50: $x_1 + x_2 \geq 50$
2. At least 12 staff members must be cooks: $x_2 \geq 12$
3. The number of cooks must be at least one third the number of waiters: $x_2 \geq \frac{1}{3}x_1$
4. The weekly wage bill must be below $17,600: $147x_1 + 290x_2 \leq 17600$

## 3: Symbolic Representation
The symbolic representation of the problem is:
```json
{
'sym_variables': [('x1', 'waiters'), ('x2', 'cooks')],
'objective_function': '147*x1 + 290*x2',
'constraints': [
    'x1 + x2 >= 50',
    'x2 >= 12',
    'x2 >= (1/3)*x1',
    '147*x1 + 290*x2 <= 17600'
]
}
```

## 4: Gurobi Code
To solve this linear programming problem using Gurobi, we will use the Gurobi Python API.

```python
import gurobi

def solve_restaurant_staffing_problem():
    # Create a new model
    model = gurobi.Model()

    # Define the variables
    x1 = model.addVar(name='waiters', lb=0, vtype=gurobi.GRB.INTEGER)  # Number of waiters
    x2 = model.addVar(name='cooks', lb=0, vtype=gurobi.GRB.INTEGER)    # Number of cooks

    # Set the objective function
    model.setObjective(147 * x1 + 290 * x2, gurobi.GRB.MINIMIZE)

    # Add constraints
    model.addConstr(x1 + x2 >= 50, name='total_staff')
    model.addConstr(x2 >= 12, name='min_cooks')
    model.addConstr(x2 >= (1/3) * x1, name='cook_to_waiter_ratio')
    model.addConstr(147 * x1 + 290 * x2 <= 17600, name='wage_bill')

    # Optimize the model
    model.optimize()

    # Print the solution
    if model.status == gurobi.GRB.OPTIMAL:
        print('Optimal Solution:')
        print(f'Number of waiters: {x1.varValue}')
        print(f'Number of cooks: {x2.varValue}')
        print(f'Total wage bill: ${147 * x1.varValue + 290 * x2.varValue}')
    else:
        print('No optimal solution found.')

solve_restaurant_staffing_problem()
```