To solve this optimization problem, we first need to define our decision variables and the objective function. Let's denote:

- \(W\) as the number of winter jackets made daily.
- \(R\) as the number of rain jackets made daily.

The objective is to maximize profit. Given that each winter jacket results in a $5 loss and each rain jacket results in a $50 profit, our objective function can be written as:

\[ \text{Maximize:} -5W + 50R \]

We have several constraints based on the problem description:

1. At most 60 winter jackets can be made daily: \( W \leq 60 \)
2. At most 70 rain jackets can be made daily: \( R \leq 70 \)
3. Demand for at least 30 winter jackets daily: \( W \geq 30 \)
4. Demand for at least 35 rain jackets daily: \( R \geq 35 \)
5. A total of at least 80 jackets must be made daily: \( W + R \geq 80 \)

Since we cannot make a negative number of jackets, we also have:

- \( W \geq 0 \)
- \( R \geq 0 \)

However, these non-negativity constraints are implicitly satisfied by the demand constraints (3 and 4), so we do not need to explicitly include them.

Now, let's write the Gurobi code in Python that represents this optimization problem:

```python
from gurobipy import *

# Create a new model
m = Model("Jacket_Production")

# Define variables
W = m.addVar(lb=30, ub=60, vtype=GRB.INTEGER, name="Winter_Jackets")
R = m.addVar(lb=35, ub=70, vtype=GRB.INTEGER, name="Rain_Jackets")

# Objective function: Maximize profit
m.setObjective(-5*W + 50*R, GRB.MAXIMIZE)

# Constraint: Total jackets made must be at least 80
m.addConstr(W + R >= 80, "Total_Jackets_Constraint")

# Solve the model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print(f"Optimal Solution: Winter Jackets = {W.x}, Rain Jackets = {R.x}")
    print(f"Maximum Profit: {-5*W.x + 50*R.x}")
else:
    print("No optimal solution found")
```