from PySide2 import QtGui
from PySide2.QtCore import QSize, QItemSelectionModel
from PySide2.QtGui import QStandardItemModel, QStandardItem
from PySide2.QtWidgets import QListView, QAbstractItemView

from theater import caucasus, nevada, persiangulf, normandy, thechannel, syria
import qt_ui.uiconstants as CONST

CAMPAIGNS = [
    ("Caucasus - Western Georgia", caucasus.WesternGeorgia, "Terrain_Caucasus"),
    ("Caucasus - Russia Small", caucasus.RussiaSmall, "Terrain_Caucasus"),
    ("Caucasus - North Caucasus", caucasus.NorthCaucasus, "Terrain_Caucasus"),
    ("Caucasus - Full Map", caucasus.CaucasusTheater, "Terrain_Caucasus"),
    ("Nevada - North Nevada", nevada.NevadaTheater, "Terrain_Nevada"),
    ("Persian Gulf - Invasion of Iran", persiangulf.IranianCampaign, "Terrain_Persian_Gulf"),
    ("Persian Gulf - Invasion of Iran [Lite]", persiangulf.IranInvasionLite, "Terrain_Persian_Gulf"),
    ("Persian Gulf - Emirates", persiangulf.Emirates, "Terrain_Persian_Gulf"),
    ("Persian Gulf - Desert War", persiangulf.DesertWar, "Terrain_Persian_Gulf"),
    ("Persian Gulf - Full Map", persiangulf.PersianGulfTheater, "Terrain_Persian_Gulf"),

    ("Syria - Golan heights battle", syria.GolanHeights, "Terrain_Syria"),
    ("Syria - Invasion from Turkey", syria.TurkishInvasion, "Terrain_Syria"),
    ("Syria - Syrian Civil War", syria.SyrianCivilWar, "Terrain_Syria"),
    ("Syria - Inherent Resolve", syria.InherentResolve, "Terrain_Syria"),
    ("Syria - Full Map", syria.SyriaFullMap, "Terrain_Syria"),

    ("Normandy - Normandy", normandy.NormandyTheater, "Terrain_Normandy"),
    ("Normandy - Normandy Small", normandy.NormandySmall, "Terrain_Normandy"),
    ("The Channel - Battle of Britain", thechannel.BattleOfBritain, "Terrain_Channel"),
    ("The Channel - Dunkirk", thechannel.Dunkirk, "Terrain_Channel"),
]


class QCampaignItem(QStandardItem):

    def __init__(self, text, theater, icon):
        super(QCampaignItem, self).__init__()
        self.theater = theater
        self.setIcon(QtGui.QIcon(CONST.ICONS[icon]))
        self.setEditable(False)
        self.setText(text)

class QCampaignList(QListView):

    def __init__(self):
        super(QCampaignList, self).__init__()
        self.model = QStandardItemModel(self)
        self.setModel(self.model)
        self.setMinimumWidth(250)
        self.setMinimumHeight(350)
        self.campaigns = []
        self.setSelectionBehavior(QAbstractItemView.SelectItems)
        self.setup_content()

    def setup_content(self):
        for i, campaign in enumerate(CAMPAIGNS):
            self.campaigns.append(campaign)
            item = QCampaignItem(*campaign)
            self.model.appendRow(item)
        self.setSelectedCampaign(0)
        self.repaint()

    def setSelectedCampaign(self, row):
        self.selectionModel().clearSelection()
        index = self.model.index(row, 0)
        if not index.isValid():
            index = self.model.index(0, 0)
        self.selectionModel().setCurrentIndex(index, QItemSelectionModel.Select)
        self.repaint()

    def clear_layout(self):
        self.model.removeRows(0, self.model.rowCount())