"use strict";
define([
    'app',
    'Series/Index/List/CollectionView',
    'Series/Index/Posters/CollectionView',
    'Series/Index/EmptyView',
    'Series/Index/Table/AirDateCell',
    'Series/Index/Table/SeriesStatusCell',
    'Shared/Toolbar/ToolbarLayout',
    'Config'
],
    function () {
        NzbDrone.Series.Index.SeriesIndexLayout = Backbone.Marionette.Layout.extend({
            template: 'Series/Index/SeriesIndexLayoutTemplate',

            regions: {
                series : '#x-series',
                toolbar: '#x-toolbar'
            },

            columns: [
                {
                    name      : 'status',
                    label     : '',
                    cell      : 'seriesStatus'
                },
                {
                    name      : 'title',
                    label     : 'Title',
                    cell      : Backgrid.TemplateBackedCell.extend({ template: 'Series/Index/Table/SeriesTitleTemplate' })
                },
                {
                    name      : 'seasonCount',
                    label     : 'Seasons',
                    cell      : 'integer'
                },
                {
                    name      : 'quality',
                    label     : 'Quality',
                    cell      : 'integer'
                },
                {
                    name      : 'network',
                    label     : 'Network',
                    cell      : 'string'
                },
                {
                    name      : 'nextAiring',
                    label     : 'Next Airing',
                    cell      : 'airDate'
                },
                {
                    name      : 'episodes',
                    label     : 'Episodes',
                    sortable  : false,
                    cell      : Backgrid.TemplateBackedCell.extend({ template: 'Series/EpisodeProgressTemplate' })
                },
                {
                    name      : 'edit',
                    label     : '',
                    sortable  : false,
                    cell      : Backgrid.TemplateBackedCell.extend({ template: 'Series/Index/Table/ControlsColumnTemplate' })
                }
            ],

            showTable: function () {

                this.series.show(new Backgrid.Grid(
                    {
                        row       : NzbDrone.Series.Index.Table.Row,
                        columns   : this.columns,
                        collection: this.seriesCollection,
                        className : 'table table-hover'
                    }));
            },

            showList: function () {
                this.series.show(new NzbDrone.Series.Index.List.CollectionView({ collection: this.seriesCollection }));
            },

            showPosters: function () {
                this.series.show(new NzbDrone.Series.Index.Posters.CollectionView({ collection: this.seriesCollection }));
            },

            showEmpty: function () {
                this.series.show(new NzbDrone.Series.Index.EmptyView());
            },

            initialize: function () {
                this.seriesCollection = new NzbDrone.Series.SeriesCollection();
                this.seriesCollection.fetch();
            },

            onShow: function () {

                var viewButtons = {
                    type         : 'radio',
                    storeState   : true,
                    menuKey      : 'seriesViewMode',
                    defaultAction: 'listView',
                    items        : [
                        {
                            key     : 'tableView',
                            title   : '',
                            icon    : 'icon-table',
                            callback: this.showTable
                        },
                        {
                            key     : 'listView',
                            title   : '',
                            icon    : 'icon-list',
                            callback: this.showList
                        },
                        {
                            key     : 'posterView',
                            title   : '',
                            icon    : 'icon-picture',
                            callback: this.showPosters
                        }
                    ]
                };


                var leftSideButtons = {
                    type      : 'default',
                    storeState: false,
                    items     : [
                        {
                            title: 'Add Series',
                            icon : 'icon-plus',
                            route: 'series/add'
                        },
                        {
                            title         : 'RSS Sync',
                            icon          : 'icon-rss',
                            command       : 'rsssync',
                            successMessage: 'RSS Sync Completed',
                            errorMessage  : 'RSS Sync Failed!'
                        },
                        {
                            title         : 'Update Library',
                            icon          : 'icon-refresh',
                            command       : 'diskscan',
                            successMessage: 'Library was updated!',
                            errorMessage  : 'Library update failed!'
                        },
                        {
                            title         : 'Test Action',
                            icon          : 'icon-asterisk',
                            command       : 'test',
                            successMessage: 'Test Completed',
                            errorMessage  : 'Test Failed!'
                        }
                    ]
                };

                this.toolbar.show(new NzbDrone.Shared.Toolbar.ToolbarLayout({
                    right  : [ viewButtons],
                    left   : [ leftSideButtons],
                    context: this
                }));
            }

        })
        ;
    })
;