@model String
@{ViewBag.Title = "History";}
@section ActionMenu{
    <ul class="sub-menu">
        <li>@Ajax.ActionLink("Trim History", "Trim", "History", null, new AjaxOptions{ OnSuccess = "redrawGrid", Confirm = "Delete history items older than 30 days?"}, new { Title = "Delete history items older than 30 days" })</li>
        <li>@Ajax.ActionLink("Purge History", "Purge", "History", null, new AjaxOptions{ OnSuccess = "redrawGrid", Confirm = "Purge all history items?" }, new { Title = "Delete all history items" })</li>
        <li>@Html.ActionLink("Search History", "Index", "SearchHistory", null, new { Title = "Review recent searches" })</li>
    </ul>
}

<div class="grid-container">
    <table id="historyGrid" class="dataTablesGrid hidden-grid">
        <thead>
            <tr>
                <th></th>
                <th>Series Title</th>
                <th>Episode</th>
                <th>Episode Title</th>
                <th>Quality</th>
                <th>Grabbed On</th>
        
                @*Commands Column*@
                <th>Actions</th>
            
                @*Details Column*@
                <th style="display: none;">Details</th>
            </tr>
        </thead>
        <tbody>
        </tbody>
    </table>
</div>

@section Scripts{
    <script type="text/javascript">
        deleteHistoryRowUrl = '../History/Delete';
        redownloadUrl = '../History/Redownload';

        function reloadHistoryGrid() {
            var grid = $('#history').data('tGrid');
            grid.ajaxRequest();
        }

        $(document).ready(function() {
            $('#historyGrid').removeClass('hidden-grid');

            oTable = $('#historyGrid').dataTable({
                "sAjaxSource": "/history/ajaxbinding",
                "bServerSide": true,
                "bProcessing": true,
                "bShowAll": false,
                "bPaginate": true,
                "bLengthChange": false,
                "bFilter": true,
                "bSort": true,
                "bInfo": true,
                "bAutoWidth": false,
                "iDisplayLength": 20,
                "sPaginationType": "four_button",
                "aoColumns": [
                                {
                                    sName: 'Icon', sWidth: '20px', "bSortable": false, "bSearchable": false, "mDataProp": function (source, type, val) {
                                        // 'display' and 'filter' use the image
                                        if (type === 'display' || type === 'filter') {
                                            if (source['Indexer'].indexOf("Newznab") === 0)
                                                return '<img src="/Image/Newznab?name=' + source['Indexer'] + '" alt="' + source['Indexer'].replace('_', ' - ') + '" title="' + source['Indexer'].replace('_', ' - ') + '">';

                                            return "<img src='/Content/Images/Indexers/" + source['Indexer'] + ".png' alt='" + source["Indexer"] + "' title='" + source["Indexer"] + "'>";
                                        }
                                        // 'sort' and 'type' both just use the raw data
                                        return source["Indexer"];
                                    }
                                }, //Image
                                {
                                    sName: 'Series.Title', sWidth: 'auto', "mDataProp": function (source, type, val) {
                                        // 'display' and 'filter' use our fancy naming
                                        if (type === 'display' || type === 'filter') {
                                            return "<a href='/Series/Details?seriesId=" + source["SeriesId"] + "'>" + source["SeriesTitle"] + "</a>";
                                        }
                                        // 'sort' and 'type' both just use the raw data
                                        return source["SeriesTitleSorter"];
                                    }
                                }, //Series Title
                                { sName: 'EpisodeNumbering', sWidth: '80px', "mDataProp": "EpisodeNumbering", "bSortable": false, "bSearchable": false }, //EpisodeNumbering
                                { sName: 'Episodes.Title', sWidth: 'auto', "mDataProp": "EpisodeTitle", "bSortable": false }, //Episode Title
                                { sName: 'Quality', sWidth: '70px', "mDataProp": "Quality", "bSortable": false, "bSearchable": false }, //Quality
                                { sName: 'Date', sWidth: '150px', "bSearchable": false, "mDataProp": function (source, type, val) {
                                        // 'display' and 'filter' use our fancy naming
                                        if (type === 'display' || type === 'filter') {
                                            return source["Date"];
                                        }
                                        // 'sort' and 'type' both just use the raw data
                                        return source["DateSorter"];
                                    }
                                }, //Date
                                { sName: 'Actions', sWidth: '40px', "mDataProp": "HistoryId", "bSortable": false, "bSearchable": false, "fnRender": function (row) {
                                    var deleteImage = '<i class="icon-remove gridAction" title="Delete from History" onclick="deleteHistory(this.parentNode.parentNode, ' + row.aData["HistoryId"] + ')"></i>';
                                    var redownloadImage = '<i class="icon-repeat gridAction" title="Redownload Episode" onclick="redownloadHistory(this.parentNode.parentNode, ' + row.aData["HistoryId"] + ', ' + row.aData["EpisodeId"] + ')"></i>';

                                    return deleteImage + redownloadImage;
                                }
                                }, //Actions
                    {
                        sName: 'Details', sWidth: 'auto',
                        "mDataProp": "Details",
                        "bSortable": false,
                        "bSearchable": false,
                        "bVisible": false,
                        "fnRender": function(row) {
                            var result = "<b>Overview: </b>" + row.aData["EpisodeOverview"] + "<br/>" +
                                "<b>NZB Title: </b>" + row.aData["NzbTitle"] + "<br/>" +
                                    "<b>Proper: </b>" + row.aData["IsProper"] + "<br/>" +
                                    "<b>Indexer: </b>" + row.aData["Indexer"].replace('_', ' - ');
                            
                            if (row.aData["ReleaseGroup"] != null && row.aData["ReleaseGroup"] != "")
                                result += "<br/><b>Release Group: </b> " + row.aData["ReleaseGroup"];

                            if (row.aData["NzbInfoUrl"] != null && row.aData["NzbInfoUrl"] != "")
                                result += "<br/><b>Nzb Details: </b> <a href=\"" + row.aData["NzbInfoUrl"] + "\" target=\"_blank\">Details</a>";

                            return result;
                        }
                    } //Details
                ],
                "aaSorting": [[5, 'desc']],
                "oLanguage": {
                    "sEmptyTable": "Nothing has been downloaded, or results have been purged",
                    "sZeroRecords": "No items match the filter"
                }
            }).fnSetFilteringDelay(500);
        });

        function deleteHistory(row, historyId) {
            //Delete from DB
            $.ajax({
                type: "POST",
                url: deleteHistoryRowUrl,
                data: { historyId: historyId },
                success: function() {
                    oTable.fnDeleteRow(oTable.fnGetPosition(row));
                }
            });

        }

        function redownloadHistory(row, historyId, episodeId) {
            $.ajax({
                type: "POST",
                url: redownloadUrl,
                data: { historyId: historyId, episodeId: episodeId },
                success: function() {
                    oTable.fnDeleteRow(oTable.fnGetPosition(row));
                }
            });
        }
    </script>
}