import Vue from 'vue';
import VueRouter from 'vue-router';

import Home from '../components/home/home.vue';
import Release from '../components/releases/release.vue';
import Site from '../components/sites/site.vue';
import Network from '../components/networks/network.vue';
import Networks from '../components/networks/networks.vue';
import Actor from '../components/actors/actor.vue';
import Actors from '../components/actors/actors.vue';
import Tag from '../components/tags/tag.vue';
import Tags from '../components/tags/tags.vue';
import Search from '../components/search/search.vue';
import NotFound from '../components/errors/404.vue';

Vue.use(VueRouter);

const routes = [
	{
		path: '/',
		redirect: {
			name: 'latest',
		},
	},
	{
		path: '/home',
		redirect: {
			name: 'latest',
		},
	},
	{
		path: '/latest',
		component: Home,
		name: 'latest',
	},
	{
		path: '/upcoming',
		component: Home,
		name: 'upcoming',
	},
	{
		path: '/new',
		component: Home,
		name: 'new',
	},
	{
		path: '/scene/:releaseId/:releaseSlug?',
		component: Release,
		name: 'scene',
	},
	{
		path: '/movie/:releaseId/:releaseSlug?',
		component: Release,
		name: 'movie',
	},
	{
		path: '/actor/:actorSlug',
		name: 'actor',
		redirect: from => ({
			name: 'actorRange',
			params: {
				...from.params,
				range: 'latest',
			},
		}),
	},
	{
		path: '/actor/:actorSlug/:range',
		component: Actor,
		name: 'actorRange',
	},
	{
		path: '/site/:siteSlug',
		component: Site,
		name: 'site',
		redirect: from => ({
			name: 'siteRange',
			params: {
				...from.params,
				range: 'latest',
			},
		}),
	},
	{
		path: '/site/:siteSlug/:range',
		component: Site,
		name: 'siteRange',
	},
	{
		path: '/network/:networkSlug',
		component: Network,
		name: 'network',
		redirect: from => ({
			name: 'networkRange',
			params: {
				...from.params,
				range: 'latest',
			},
		}),
	},
	{
		path: '/network/:networkSlug/:range',
		component: Network,
		name: 'networkRange',
	},
	{
		path: '/tag/:tagSlug',
		component: Tag,
		name: 'tag',
		redirect: from => ({
			name: 'tagRange',
			params: {
				...from.params,
				range: 'latest',
			},
		}),
	},
	{
		path: '/tag/:tagSlug/:range',
		component: Tag,
		name: 'tagRange',
	},
	{
		path: '/actors/:gender?/:letter?',
		component: Actors,
		name: 'actors',
	},
	{
		path: '/networks',
		component: Networks,
		name: 'networks',
	},
	{
		path: '/tags',
		component: Tags,
		name: 'tags',
	},
	{
		path: '/search',
		component: Search,
		name: 'search',
	},
	{
		path: '*',
		component: NotFound,
	},
];

const router = new VueRouter({
	mode: 'history',
	routes,
});

export default router;