## Problem Description and Formulation

The problem is a classic example of a linear programming problem. The factory produces two products: bedside tables (BT) and bookcases (BC). Each product requires a certain amount of time for crafting and polishing. The goal is to maximize profit given the constraints on crafting and polishing hours.

Let's define the decision variables:
- \(x_{BT}\): Number of bedside tables produced daily
- \(x_{BC}\): Number of bookcases produced daily

The objective function to maximize profit (\(P\)) is:
\[ P = 200x_{BT} + 500x_{BC} \]

The constraints based on the given information are:
1. Crafting hours: \(2.5x_{BT} + 5x_{BC} \leq 30\)
2. Polishing hours: \(1.5x_{BT} + 3x_{BC} \leq 20\)
3. Non-negativity: \(x_{BT} \geq 0, x_{BC} \geq 0\)

## Gurobi Code

To solve this problem using Gurobi in Python, we will use the Gurobi Python interface. First, ensure you have Gurobi installed and a valid license.

```python
import gurobi

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

    # Define variables
    x_BT = model.addVar(lb=0, name="Bedside_Tables")  # Number of bedside tables
    x_BC = model.addVar(lb=0, name="Bookcases")     # Number of bookcases

    # Objective function: Maximize profit
    model.setObjective(200 * x_BT + 500 * x_BC, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(2.5 * x_BT + 5 * x_BC <= 30, name="Crafting_Hours")     # Crafting hours constraint
    model.addConstr(1.5 * x_BT + 3 * x_BC <= 20, name="Polishing_Hours")   # Polishing hours constraint

    # Optimize
    model.optimize()

    # Print solution
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal production levels:")
        print(f"Bedside Tables: {x_BT.varValue}")
        print(f"Bookcases: {x_BC.varValue}")
        print(f"Max Profit: {model.objVal}")
    else:
        print("No optimal solution found.")

if __name__ == "__main__":
    solve_production_problem()
```

This code defines the problem in Gurobi, solves it, and prints out the optimal production levels for bedside tables and bookcases, along with the maximum achievable profit. If no optimal solution is found (for example, if the problem is infeasible), it will indicate that as well.