#
# BitBake Toaster Implementation
#
# Copyright (C) 2013-2017    Intel Corporation
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

from django.conf.urls import include, url
from django.views.generic import RedirectView, TemplateView

from django.http import HttpResponseBadRequest
from toastergui import tables
from toastergui import buildtables
from toastergui import typeaheads
from toastergui import api
from toastergui import widgets
from toastergui import views

urlpatterns = [
        # landing page
        url(r'^landing/$', views.landing, name='landing'),

        url(r'^builds/$',
            tables.AllBuildsTable.as_view(template_name="builds-toastertable.html"),
            name='all-builds'),

        # build info navigation
        url(r'^build/(?P<build_id>\d+)$', views.builddashboard, name="builddashboard"),
        url(r'^build/(?P<build_id>\d+)/tasks/$',
            buildtables.BuildTasksTable.as_view(
                template_name="buildinfo-toastertable.html"),
            name='tasks'),

        url(r'^build/(?P<build_id>\d+)/task/(?P<task_id>\d+)$', views.task, name='task'),

        url(r'^build/(?P<build_id>\d+)/recipes/$',
            buildtables.BuiltRecipesTable.as_view(
                template_name="buildinfo-toastertable.html"),
            name='recipes'),

        url(r'^build/(?P<build_id>\d+)/recipe/(?P<recipe_id>\d+)/active_tab/(?P<active_tab>\d{1})$', views.recipe, name='recipe'),

        url(r'^build/(?P<build_id>\d+)/recipe/(?P<recipe_id>\d+)$', views.recipe, name='recipe'),
        url(r'^build/(?P<build_id>\d+)/recipe_packages/(?P<recipe_id>\d+)$', views.recipe_packages, name='recipe_packages'),

        url(r'^build/(?P<build_id>\d+)/packages/$',
            buildtables.BuiltPackagesTable.as_view(
                template_name="buildinfo-toastertable.html"),
            name='packages'),

        url(r'^build/(?P<build_id>\d+)/package/(?P<package_id>\d+)$', views.package_built_detail,
                name='package_built_detail'),
        url(r'^build/(?P<build_id>\d+)/package_built_dependencies/(?P<package_id>\d+)$',
            views.package_built_dependencies, name='package_built_dependencies'),
        url(r'^build/(?P<build_id>\d+)/package_included_detail/(?P<target_id>\d+)/(?P<package_id>\d+)$',
            views.package_included_detail, name='package_included_detail'),
        url(r'^build/(?P<build_id>\d+)/package_included_dependencies/(?P<target_id>\d+)/(?P<package_id>\d+)$',
            views.package_included_dependencies, name='package_included_dependencies'),
        url(r'^build/(?P<build_id>\d+)/package_included_reverse_dependencies/(?P<target_id>\d+)/(?P<package_id>\d+)$',
            views.package_included_reverse_dependencies, name='package_included_reverse_dependencies'),

        url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$',
            buildtables.InstalledPackagesTable.as_view(
                template_name="target.html"),
            name='target'),


        url(r'^dentries/build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$', views.xhr_dirinfo, name='dirinfo_ajax'),
        url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/dirinfo$', views.dirinfo, name='dirinfo'),
        url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/dirinfo_filepath/_(?P<file_path>(?:/[^/\n]+)*)$', views.dirinfo, name='dirinfo_filepath'),
        url(r'^build/(?P<build_id>\d+)/configuration$', views.configuration, name='configuration'),
        url(r'^build/(?P<build_id>\d+)/configvars$', views.configvars, name='configvars'),
        url(r'^build/(?P<build_id>\d+)/buildtime$',
            buildtables.BuildTimeTable.as_view(
                template_name="buildinfo-toastertable.html"),
            name='buildtime'),

        url(r'^build/(?P<build_id>\d+)/cputime$',
            buildtables.BuildCPUTimeTable.as_view(
                template_name="buildinfo-toastertable.html"),
            name='cputime'),

        url(r'^build/(?P<build_id>\d+)/diskio$',
            buildtables.BuildIOTable.as_view(
                template_name="buildinfo-toastertable.html"),
            name='diskio'),

        # image information dir
        url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/packagefile/(?P<packagefile_id>\d+)$',
             views.image_information_dir, name='image_information_dir'),

        # build download artifact
        url(r'^build/(?P<build_id>\d+)/artifact/(?P<artifact_type>\w+)/id/(?P<artifact_id>\w+)', views.build_artifact, name="build_artifact"),

        # project URLs
        url(r'^newproject/$', views.newproject, name='newproject'),

        url(r'^projects/$',
            tables.ProjectsTable.as_view(template_name="projects-toastertable.html"),
            name='all-projects'),

        url(r'^project/(?P<pid>\d+)/$', views.project, name='project'),
        url(r'^project/(?P<pid>\d+)/configuration$', views.projectconf, name='projectconf'),
        url(r'^project/(?P<pid>\d+)/builds/$',
            tables.ProjectBuildsTable.as_view(template_name="projectbuilds-toastertable.html"),
            name='projectbuilds'),

        url(r'^newproject_specific/(?P<pid>\d+)/$', views.newproject_specific, name='newproject_specific'),
        url(r'^project_specific/(?P<pid>\d+)/$', views.project_specific, name='project_specific'),
        url(r'^landing_specific/(?P<pid>\d+)/$', views.landing_specific, name='landing_specific'),
        url(r'^landing_specific_cancel/(?P<pid>\d+)/$', views.landing_specific_cancel, name='landing_specific_cancel'),

        # the import layer is a project-specific functionality;
        url(r'^project/(?P<pid>\d+)/importlayer$', views.importlayer, name='importlayer'),

        # the table pages that have been converted to ToasterTable widget
        url(r'^project/(?P<pid>\d+)/machines/$',
            tables.MachinesTable.as_view(template_name="generic-toastertable-page.html"),
            name="projectmachines"),

        url(r'^project/(?P<pid>\d+)/softwarerecipes/$',
            tables.SoftwareRecipesTable.as_view(template_name="generic-toastertable-page.html"),
            name="projectsoftwarerecipes"),

        url(r'^project/(?P<pid>\d+)/images/$',
            tables.ImageRecipesTable.as_view(template_name="generic-toastertable-page.html"), name="projectimagerecipes"),

        url(r'^project/(?P<pid>\d+)/customimages/$',
            tables.CustomImagesTable.as_view(template_name="generic-toastertable-page.html"), name="projectcustomimages"),

        url(r'^project/(?P<pid>\d+)/newcustomimage/$',
            tables.NewCustomImagesTable.as_view(template_name="newcustomimage.html"),
            name="newcustomimage"),

        url(r'^project/(?P<pid>\d+)/layers/$',
            tables.LayersTable.as_view(template_name="generic-toastertable-page.html"),
            name="projectlayers"),

        url(r'^project/(?P<pid>\d+)/layer/(?P<layerid>\d+)$',
            views.layerdetails, name='layerdetails'),

        url(r'^project/(?P<pid>\d+)/layer/(?P<layerid>\d+)/recipes/$',
            tables.LayerRecipesTable.as_view(template_name="generic-toastertable-page.html"),
            { 'table_name': tables.LayerRecipesTable.__name__.lower(),
              'title' : 'All recipes in layer' },
             name=tables.LayerRecipesTable.__name__.lower()),

        url(r'^project/(?P<pid>\d+)/layer/(?P<layerid>\d+)/machines/$',
            tables.LayerMachinesTable.as_view(template_name="generic-toastertable-page.html"),
            { 'table_name': tables.LayerMachinesTable.__name__.lower(),
              'title' : 'All machines in layer' },
            name=tables.LayerMachinesTable.__name__.lower()),


        url(r'^project/(?P<pid>\d+)/distros/$',
            tables.DistrosTable.as_view(template_name="generic-toastertable-page.html"),
            name="projectdistros"),


        url(r'^project/(?P<pid>\d+)/customrecipe/(?P<custrecipeid>\d+)/selectpackages/$',
            tables.SelectPackagesTable.as_view(), name="recipeselectpackages"),


        url(r'^project/(?P<pid>\d+)/customrecipe/(?P<custrecipeid>\d+)$',
            tables.SelectPackagesTable.as_view(template_name="customrecipe.html"),
            name="customrecipe"),

        url(r'^project/(?P<pid>\d+)/customrecipe/(?P<recipe_id>\d+)/download$',
            views.customrecipe_download,
            name="customrecipedownload"),

        url(r'^project/(?P<pid>\d+)/recipe/(?P<recipe_id>\d+)$',
            tables.PackagesTable.as_view(template_name="recipedetails.html"),
            name="recipedetails"),

        # typeahead api end points
        url(r'^xhr_typeahead/(?P<pid>\d+)/layers$',
            typeaheads.LayersTypeAhead.as_view(), name='xhr_layerstypeahead'),
        url(r'^xhr_typeahead/(?P<pid>\d+)/machines$',
            typeaheads.MachinesTypeAhead.as_view(), name='xhr_machinestypeahead'),
        url(r'^xhr_typeahead/(?P<pid>\d+)/recipes$',
            typeaheads.RecipesTypeAhead.as_view(), name='xhr_recipestypeahead'),
        url(r'^xhr_typeahead/projects$',
            typeaheads.ProjectsTypeAhead.as_view(), name='xhr_projectstypeahead'),
        url(r'^xhr_typeahead/gitrev$',
            typeaheads.GitRevisionTypeAhead.as_view(),
            name='xhr_gitrevtypeahead'),

        url(r'^xhr_typeahead/(?P<pid>\d+)/distros$',
            typeaheads.DistrosTypeAhead.as_view(), name='xhr_distrostypeahead'),

        url(r'^xhr_testreleasechange/(?P<pid>\d+)$', views.xhr_testreleasechange,
            name='xhr_testreleasechange'),
        url(r'^xhr_configvaredit/(?P<pid>\d+)$', views.xhr_configvaredit,
            name='xhr_configvaredit'),

        url(r'^xhr_layer/(?P<pid>\d+)/(?P<layerversion_id>\d+)$',
            api.XhrLayer.as_view(),
            name='xhr_layer'),

        url(r'^xhr_layer/(?P<pid>\d+)$',
            api.XhrLayer.as_view(),
            name='xhr_layer'),

        # JS Unit tests
        url(r'^js-unit-tests/$', views.jsunittests, name='js-unit-tests'),

        # image customisation functionality
        url(r'^xhr_customrecipe/(?P<recipe_id>\d+)'
            '/packages/(?P<package_id>\d+|)$',
            api.XhrCustomRecipePackages.as_view(),
            name='xhr_customrecipe_packages'),

        url(r'^xhr_customrecipe/(?P<recipe_id>\d+)/packages/$',
            api.XhrCustomRecipePackages.as_view(),
            name='xhr_customrecipe_packages'),

        url(r'^xhr_customrecipe/(?P<recipe_id>\d+)$',
            api.XhrCustomRecipeId.as_view(),
            name='xhr_customrecipe_id'),

        url(r'^xhr_customrecipe/',
            api.XhrCustomRecipe.as_view(),
            name='xhr_customrecipe'),

        url(r'^xhr_buildrequest/project/(?P<pid>\d+)$',
            api.XhrBuildRequest.as_view(),
            name='xhr_buildrequest'),

        url(r'^xhr_projectupdate/project/(?P<pid>\d+)$',
            api.XhrProjectUpdate.as_view(),
            name='xhr_projectupdate'),

        url(r'^xhr_setdefaultimage/project/(?P<pid>\d+)$',
            api.XhrSetDefaultImageUrl.as_view(),
            name='xhr_setdefaultimage'),

        url(r'xhr_project/(?P<project_id>\d+)$',
            api.XhrProject.as_view(),
            name='xhr_project'),

        url(r'xhr_build/(?P<build_id>\d+)$',
            api.XhrBuild.as_view(),
            name='xhr_build'),

        url(r'^mostrecentbuilds$', widgets.MostRecentBuildsView.as_view(),
            name='most_recent_builds'),

        # JSON data for aggregators
        url(r'^api/builds$', views.json_builds, name='json_builds'),
        url(r'^api/building$', views.json_building, name='json_building'),
        url(r'^api/build/(?P<build_id>\d+)$', views.json_build, name='json_build'),

        # default redirection
        url(r'^$', RedirectView.as_view(url='landing', permanent=True)),
]
