#
#   Copyright 2017 CNIT - Consorzio Nazionale Interuniversitario per le Telecomunicazioni
#
#   Licensed 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  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.
#

from django.conf.urls import url, include
from projecthandler import views

urlpatterns = [
    url(r'^$', views.open_project, name='open_project'),
    url(r'^list/', views.user_projects, name='projects_list'),
    url(r'^new/', views.create_new_project, name='new_project'),
    url(r'^delete$', views.delete_project, name='delete_project'),
    url(r'^switch/(?P<project_id>\w+)', views.switch_project, name='switch_project'),
    url(r'^descriptors/(?P<descriptor_type>\w+)/list$', views.show_descriptors, name='list_descriptors'),
    url(r'^descriptors/(?P<descriptor_type>\w+)/(?P<descriptor_id>[-\w]+)(/$)',
        views.edit_descriptor, name='edit_descriptor'),
    url(r'^descriptors/(?P<descriptor_type>\w+)/(?P<descriptor_id>[-\w]+)/delete$',
        views.delete_descriptor,
        name='delete_descriptor'),
    url(r'^descriptors/(?P<descriptor_type>\w+)/(?P<descriptor_id>[-\w]+)/action/(?P<action_name>[-\w]+)',
        views.custom_action,
        name='custom_action'),
    url(r'^descriptors/(?P<descriptor_type>\w+)/new$', views.new_descriptor,
        name='new_descriptor'),
    url(r'^composer$', views.open_composer, name='open_composer'),
    url(r'^availablenodes', views.get_available_nodes, name='get_available_nodes'),
    url(r'^sdn/', include('sdnctrlhandler.urls', namespace='sdns'), name='sdns_base'),
    url(r'^vims/', include('vimhandler.urls', namespace='vims'), name='vims_base'),
    url(r'^instances/', include('instancehandler.urls', namespace='instances'), name='instances_base'),

]