# -*- coding: utf-8 -*-

PLUGIN_NAME = u'(Folksonomy) Tag Editor'
PLUGIN_AUTHOR = u'Lukáš Lalinský'
PLUGIN_DESCRIPTION = u''
PLUGIN_VERSION = "0.1"
PLUGIN_API_VERSIONS = ["0.9.0"]


import sys
from PyQt4 import QtCore, QtGui


class MyQTreeWidget(QtGui.QTreeWidget):

    def xsupportedDropActions(self):
        return QtCore.Qt.MoveAction


class TagEditWindow(QtGui.QMainWindow):

    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        self.setWindowTitle("MusicBrainz Tag Editor")
        centralWidget = QtGui.QWidget(self)
        self.setCentralWidget(centralWidget)

        hbox = QtGui.QHBoxLayout(centralWidget)
        vbox1 = QtGui.QVBoxLayout()
        vbox2 = QtGui.QVBoxLayout()

        label = QtGui.QLabel("Find Stuff to Tag")
        font = label.font()
        font.setPointSize(12)
        font.setBold(True)
        vbox1.addWidget(label)

        self.searchResults = MyQTreeWidget()
        self.searchResults.setRootIsDecorated(False)
        self.searchResults.header().hide()
        self.searchResults.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
        self.searchResults.setDragEnabled(True)
        self.searchResults.setAcceptDrops(True)
        vbox1.addWidget(self.searchResults)

        label = QtGui.QLabel("Tag 'em!")
        font = label.font()
        font.setPointSize(12)
        font.setBold(True)
        vbox2.addWidget(label)

        self.currentSet = MyQTreeWidget()
        self.currentSet.setRootIsDecorated(False)
        self.currentSet.header().hide()
        self.currentSet.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
        self.currentSet.setDragEnabled(True)
        self.currentSet.setAcceptDrops(True)
        vbox2.addWidget(self.currentSet, 10)

        item = QtGui.QTreeWidgetItem()
        item.setText(0, "No Roots, Part 1 by Faithless from No Roots")
        self.currentSet.addTopLevelItem(item)

        label = QtGui.QLabel("Add or edit tags for this set:")
        vbox2.addWidget(label)

        self.tagsEditor = QtGui.QTextEdit()
        vbox2.addWidget(self.tagsEditor, 2)

        self.saveButton = QtGui.QPushButton("Save changes")
        hbox2 = QtGui.QHBoxLayout()
        hbox2.addStretch()
        hbox2.addWidget(self.saveButton)
        vbox2.addLayout(hbox2)

        hbox.addLayout(vbox1)
        hbox.addLayout(vbox2)

    def addSearchResult(self, entityType, entityId, name):
        item = QtGui.QTreeWidgetItem(self.searchResults)
        item.setText(0, name)
        item.setData(0, QtCore.Qt.UserRole + 1, QtCore.QVariant(entityType))
        item.setData(0, QtCore.Qt.UserRole + 2, QtCore.QVariant(entityId))


from picard.ui.itemviews import BaseAction, register_album_action

class EditAlbumTagsAction(BaseAction):
    NAME = "Add or Edit Tags..."

    def callback(self, objs):
        self.win = TagEditWindow()
        artists = set()
        for obj in objs:
            self.win.addSearchResult('release', obj.metadata['musicbrainz_albumid'], obj.metadata['album'])
            artists.add((obj.metadata['musicbrainz_albumartistid'], obj.metadata['artist']))
            for track in obj.tracks:
                self.win.addSearchResult('track', track.metadata['musicbrainz_trackid'], track.metadata['title'])
                artists.add((track.metadata['musicbrainz_artistid'], track.metadata['artist']))
        for artistId, artistName in artists:
            self.win.addSearchResult('artist', artistId, artistName)
        self.win.show()

register_album_action(EditAlbumTagsAction())
