<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
{% extends "experimentpage.html" %}

{% block content %}

<h1>Please enter your product information:</h1>
<form method="POST" action="{% url 'exp_portal:new_product' %}">
	<div class="form-group">
		<label for="id_dataset">Challenge Problem</label>
		<select class="form-control" name="product_dataset" id='id_product_dataset' value="{{ product.dataset.name }}" required>
			{% for dataset in datasets %}
			<option value="{{ dataset.name }}">{{ dataset.name }}</option>
			{% endfor %}
		</select>
	</div>
	<div class="form-group">
		<label for="id_product_url">Product URL</label>
		<input class="form-control" name="product_url" id="id_product_url" value="{{ product.url }}" size="60" required/>
	</div>
	<div class="form-group">
		<label for="id_product_name">Product Name</label>
		<input class="form-control" name="product_name" id='id_product_name' value="{{ product.name }}" size="60" required/>
	</div>
	<div class="form-group">
		<label for="id_product_team">Team Name</label>
		<input class="form-control" name="product_team" id="id_product_team" value="{{ product.team }}" size="60" required/>
	</div>
	<div class="form-group">
		<label for="id_version">Version</label>
		<input class="form-control" name="product_version" id="id_product_version" value="{{ product.version }}" required/>
	</div>
	<div class="form-group">
		<label for="id_instructions_url">Instructions URL</label>
		<input class="form-control" name="product_instructions" id="id_product_instructions" value="{{ product.instructions }}" size="60" required/>
	</div>
	<div class="checkbox">
		<label>
			<input type="checkbox" name="product_active" id="id_product_active" {% if product.is_active %}checked{% endif %}>Active
		</label>
	</div>
	<input class="btn btn-primary" type="submit" value="Submit"/>
	{% csrf_token %}
</form>

{% endblock %}