import bleach
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
from django.shortcuts import render
from django.template import loader
from django.views.decorators.http import require_POST
from backend.main.models import Playlist


@login_required
def manage_playlists(request):
    return render(request, 'manage_playlists.html')


@login_required
def manage_view_page(request, page):
    if page == 'import':
        return render(
            request, 'manage_playlists_import.html',
            {'manage_playlists_import_textarea': request.user.profile.manage_playlists_import_textarea}
        )
    elif page == 'create':
        return render(request, 'manage_playlists_create.html')
    else:
        return HttpResponse('Working on this!')


@login_required
@require_POST
def manage_save(request, what):
    if what == 'manage_playlists_import_textarea':
        request.user.profile.manage_playlists_import_textarea = bleach.clean(request.POST['import-playlist-textarea'])
        request.user.save()

    return HttpResponse('')


@login_required
@require_POST
def manage_import_playlists(request):
    playlist_links = [
        bleach.clean(link) for link in request.POST['import-playlist-textarea'].replace(',', '').split('\n')
    ]

    num_playlists_already_in_db = 0
    num_playlists_initialized_in_db = 0
    num_playlists_not_found = 0
    new_playlists = []
    old_playlists = []
    not_found_playlists = []

    done = []
    for playlist_link in playlist_links:
        if playlist_link.strip() != '' and playlist_link.strip() not in done:
            pl_id = Playlist.objects.getPlaylistId(playlist_link.strip())
            if pl_id is None:
                num_playlists_not_found += 1
                continue

            status = Playlist.objects.initializePlaylist(request.user, pl_id)['status']
            if status == -1 or status == -2:
                print('\nNo such playlist found:', pl_id)
                num_playlists_not_found += 1
                not_found_playlists.append(playlist_link)
            elif status == -3:  # playlist already in db
                num_playlists_already_in_db += 1
                playlist = request.user.playlists.get(playlist_id__exact=pl_id)
                old_playlists.append(playlist)
            else:  # only if playlist exists on YT, so import its videos
                print(status)
                Playlist.objects.getAllVideosForPlaylist(request.user, pl_id)
                playlist = request.user.playlists.get(playlist_id__exact=pl_id)
                new_playlists.append(playlist)
                num_playlists_initialized_in_db += 1
            done.append(playlist_link.strip())

    request.user.profile.manage_playlists_import_textarea = ''
    request.user.save()

    return HttpResponse(
        loader.get_template('intercooler/manage_playlists_import_results.html').render({
            'new_playlists': new_playlists,
            'old_playlists': old_playlists,
            'not_found_playlists': not_found_playlists,
            'num_playlists_already_in_db': num_playlists_already_in_db,
            'num_playlists_initialized_in_db': num_playlists_initialized_in_db,
            'num_playlists_not_found': num_playlists_not_found
        })
    )


@login_required
@require_POST
def manage_create_playlist(request):
    print(request.POST)
    return HttpResponse('')


@login_required
@require_POST
def manage_nuke_playlists(request):
    print(request.POST)
    return HttpResponse('')