To solve this optimization problem, we first need to define the decision variables and the objective function. Let's denote the number of hockey nets as \(H\) and the number of basketball hoops as \(B\).

The objective is to maximize profit. The profit per hockey net is $50, and the profit per basketball hoop is $75. Therefore, the total profit can be represented as \(50H + 75B\).

There are two main constraints:
1. **Space Constraint**: Each hockey net takes 5 sq ft of space, and each basketball hoop takes 3 sq ft of space. The warehouse has 300 sq ft available. This constraint can be represented as \(5H + 3B \leq 300\).
2. **Budget Constraint**: The budget is $10,000, with each hockey net costing $100 and each basketball hoop costing $150. This gives us the constraint \(100H + 150B \leq 10000\).
3. **Percentage of Hockey Nets Constraint**: At least 65% of all items must be hockey nets. If \(T = H + B\) represents the total number of items, then this constraint can be written as \(H \geq 0.65T\) or \(H \geq 0.65(H + B)\), which simplifies to \(H \geq 0.65H + 0.65B\), and further simplifies to \(0.35H \geq 0.65B\).

To maximize profit, we need to solve this linear programming problem using Gurobi in Python.

```python
from gurobipy import *

# Create a model
m = Model("Sports Warehouse Optimization")

# Define the decision variables
H = m.addVar(vtype=GRB.INTEGER, name="hockey_nets")
B = m.addVar(vtype=GRB.INTEGER, name="basketball_hoops")

# Objective function: Maximize profit
m.setObjective(50*H + 75*B, GRB.MAXIMIZE)

# Constraints
m.addConstr(5*H + 3*B <= 300, "space_constraint")
m.addConstr(100*H + 150*B <= 10000, "budget_constraint")
m.addConstr(H >= 0.65*(H + B), "percentage_hockey_nets")

# Solve the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print(f"Optimal solution found: Buy {H.x} hockey nets and {B.x} basketball hoops")
    print(f"Maximum profit: ${50*H.x + 75*B.x}")
else:
    print("No optimal solution found. The model is either infeasible or unbounded.")
```