import sys
import io
import folium
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtWebEngineWidgets import QWebEngineView
import sqlite3
class help_(QWidget):
    def __init__(self):
        super().__init__()
        self.textEdit = QLabel('Eserleri eklemek icin eser menusunu tiklayiniz.\n'
                               'Navigasyon menusuden konum bilgilerine ulasabilirsiniz.\n'
                               'Cikis yapmak icin exit tiklayiniz.')
        self.layout = QHBoxLayout()
        self.layout.addWidget(self.textEdit)
        self.setLayout(self.layout)
        self.setWindowTitle('Help Window')
        self.setGeometry(350,200,200,100)
class navigation(QWidget):
    def __init__(self):
        super(navigation, self).__init__()
        self.setWindowTitle('Navigation')
        self.setGeometry(200, 200, 600, 400)
        coodinate = (41.02211977968873, 29.25890758913248)
        m = folium.Map(
            title='Sancaktepe',
            zoom_start=15,
            location=coodinate
        )
        # save map data to data object
        data = io.BytesIO()
        m.save(data, close_file=False)
        webView = QWebEngineView()
        webView.setHtml(data.getvalue().decode())
        self.nav = QVBoxLayout()
        self.nav.addWidget(webView)
        self.setLayout(self.nav)
class viewSqlTable(QWidget):
    def __init__(self):
        super().__init__()
        self.createTable()
    def createTable(self):
        self.setGeometry(200, 200, 350, 400)
        self.tablo = QTableWidget()
        self.layout = QHBoxLayout()
        self.layout.addWidget(self.tablo)
        self.setLayout(self.layout)
        self.sqlTable()
    def sqlTable(self):
        self.connection = sqlite3.connect('catalog.db')
        self.cur = self.connection.cursor()
        find = "SELECT * FROM catalogs"
        self.tabloIndex = 0
        for row, row_data in enumerate(self.cur.execute(find)):
            self.tablo.insertRow(row)
            for col, col_data in enumerate(row_data):
                if self.tabloIndex < 3:
                    self.tabloIndex += 1
                self.tablo.setColumnCount(self.tabloIndex)
                self.tablo.setItem(row, col, QTableWidgetItem(str(col_data)))
class searchSqlTable(QWidget):
    def __init__(self):
        super().__init__()
        self.createTable()
    def createTable(self):
        self.setGeometry(200, 200, 345, 100)
        self.tablo = QTableWidget()
        self.layout = QHBoxLayout()
        self.layout.addWidget(self.tablo)
        self.setLayout(self.layout)
        self.sqlTable()
    def sqlTable(self):
        self.baglanti = sqlite3.connect('catalog.db')
        self.imlec = self.baglanti.cursor()
        text1, ok = QInputDialog.getText(self, 'Search Eser', 'Enter Book Name')
        self.eserAd = text1
        find = 'SELECT * FROM catalogs WHERE eserAd = ?'
        self.imlec.execute(find, (self.eserAd,))
        eser = self.imlec.fetchall()
        print(eser)
        if len(eser) == 0:
            print('There is no eser on the DB')
        else:
            self.tabloIndex = 0
            for row, row_data in enumerate(eser):
                self.tablo.insertRow(row)
                for col, col_data in enumerate(row_data):
                    if self.tabloIndex < 3:
                        self.tabloIndex += 1
                    self.tablo.setColumnCount(self.tabloIndex)
                    self.tablo.setItem(row, col, QTableWidgetItem(str(col_data)))
        self.baglanti.close()
class katalog(QMainWindow):
    def __init__(self, eserAd=None, yazarAd=None, tarih=None):
        super().__init__()
        self.eserAd = eserAd
        self.yazarAd = yazarAd
        self.tarih = tarih
        self.baglanti_olustur()
        self.initUI()
        self.w2 = navigation()
    def __str__(self):
        return '[EserAd: {0} | YazarAd: {1} | Tarih: {2}]'. \
            format(self.eserAd, self.yazarAd, self.tarih)
    def __repr__(self):
        return '[EserAd: {0} | YazarAd: {1} | Tarih: {2}]'. \
            format(self.eserAd, self.yazarAd, self.tarih)
    def baglanti_olustur(self):
        self.baglanti = sqlite3.connect('catalog.db')
        self.imlec = self.baglanti.cursor()
        tablo = 'CREATE TABLE IF NOT EXISTS catalogs(eserAd TEXT, yazarAd TEXT, tarih TEXT)'
        self.imlec.execute(tablo)
        self.baglanti.commit()
    def baglanti_kes(self):
        self.baglanti.close()
    def initUI(self):
        self.setWindowTitle('Katalog')
        self.setGeometry(200, 200, 600, 400)
        self.mainMenu = self.menuBar()
        file = self.mainMenu.addMenu('Eser')
        self.addeser = QAction('Eser Add', self)
        self.addeser.triggered.connect(self.addEser)
        self.searcheser = QAction('Search Eser', self)
        self.searcheser.triggered.connect(self.searchEser)
        self.vieweser = QAction('View Eser', self)
        self.vieweser.triggered.connect(self.viewEser)
        self.deleteeser = QAction('Delete Eser', self)
        self.deleteeser.triggered.connect(self.deleteEser)
        self.updateeser = QAction('Update Eser', self)
        self.updateeser.triggered.connect(self.updateEser)
        file.addAction(self.addeser)
        file.addAction(self.searcheser)
        file.addAction(self.vieweser)
        file.addAction(self.deleteeser)
        file.addAction(self.updateeser)
        navMenu = self.mainMenu.addMenu('Navigation')
        navMenu.addAction('Gmap')
        navMenu.triggered.connect(self.navMap)
        Help = self.mainMenu.addMenu('Help')
        Help.addAction('Help')
        Help.triggered.connect(self.Help)
        exitAction = QAction('Exit', self)
        exitAction.triggered.connect(qApp.quit)
        exitButton = self.mainMenu.addMenu('Exit')
        exitButton.addAction(exitAction)
        label = QLabel(self)
        pixmap = QPixmap('book.jpg')
        label.setPixmap(pixmap)
        label.setGeometry(0, 20, 600,400)
    def Help(self):
        self.w1 = help_()
        self.w1.show()
    def navMap(self):
        self.w2.show()
    def searchEser(self):
        self.w4 = searchSqlTable()
        self.w4.show()
    def viewEser(self):
        self.w3 = viewSqlTable()
        self.w3.show()
    def addEser(self):
        self.baglanti = sqlite3.connect('catalog.db')
        self.imlec = self.baglanti.cursor()
        text1, ok = QInputDialog.getText(self, 'Add Eser', 'Enter Book Name')
        text2, ok = QInputDialog.getText(self, 'Add Eser', 'Enter Author')
        text3, ok = QInputDialog.getText(self, 'Add Eser', 'Enter Book Date')
        if ok:
            self.eserAd = text1
            self.yazarAd = text2
            self.tarih = text3
        add = "INSERT INTO catalogs VALUES(?,?,?)"
        self.imlec.execute(add, (self.eserAd, self.yazarAd, self.tarih))
        self.baglanti.commit()
    def deleteEser(self):
        self.baglanti = sqlite3.connect('catalog.db')
        self.imlec = self.baglanti.cursor()
        text, ok = QInputDialog.getText(self, 'Delete Eser', 'Enter Book Name')
        self.eserAd = text
        find = 'DELETE FROM catalogs WHERE eserAd = ?'
        self.imlec.execute(find, (self.eserAd,))
        self.baglanti.commit()
    def updateEser(self):
        self.baglanti = sqlite3.connect('catalog.db')
        self.imlec = self.baglanti.cursor()
        text1, ok = QInputDialog.getText(self, 'Update Eser', 'Enter Update Book Name')
        self.eserAd = text1
        find = 'SELECT * FROM catalogs WHERE eserAd = ?'
        self.imlec.execute(find, (self.eserAd,))
        eser = self.imlec.fetchall()
        if len(eser) == 0:
            print('There is no eser on the DB')
        else:
            text1, ok = QInputDialog.getText(self, 'Update Eser', 'Enter New Book Name')
            text2, ok = QInputDialog.getText(self, 'Update Eser', 'Enter New Book Author')
            text3, ok = QInputDialog.getText(self, 'Update Eser', 'Enter New Book Date')
            self.eserAd = text1
            self.yazarAd = text2
            self.tarih = text3
            find2 = 'UPDATE catalogs SET eserAd=?, yazarAd=?, tarih=? WHERE eserAd = ? '
            self.imlec.execute(find2, (self.eserAd, self.yazarAd, self.tarih, self.eserAd))
            self.baglanti.commit()
app = QApplication(sys.argv)
ex = katalog()
ex.show()
sys.exit(app.exec_())