import sqlite3
import datetime
import os

class Avió:

    crearTaula = """CREATE TABLE SeientsAvio (
        id TEXT PRIMARY KEY UNIQUE,
        nom TEXT NOT NULL,
        dataReserva datetime);"""

    afegir = """INSERT INTO SeientsAvio
        (id, nom, dataReserva) 
        VALUES 
        (?,?,?)"""

    tot = "SELECT * FROM SeientsAvio"
    
    selecciona = "SELECT * FROM SeientsAvio WHERE id=?"

    modifica = """UPDATE SeientsAvio SET nom=?, dataReserva = ?
                  WHERE id=?"""
    
    def __init__(self, nom, nFiles=0):
        self.nomdb = nom + ".db"
        self.nFiles = nFiles
        if not os.path.isfile(self.nomdb):
            self.crea()
            self.obra()
            self.inicialitza()
        else:
            self.obra()
            cursor = self.connexió.cursor()
            cursor.execute(self.tot)
            self.nFiles = len(cursor.fetchall()) // 6
            

    def __iter__(self):
        for i in range(1, self.nFiles + 1):
            for c in 'ABCDEF':
                yield f'{i}{c}'

    def crea(self):
        connexió = sqlite3.connect(self.nomdb)
        cursor = connexió.cursor()
        cursor.execute(self.crearTaula)
        connexió.commit()
        cursor.close()
        connexió.close()

    def obra(self):
        self.connexió = sqlite3.connect(self.nomdb,
                                detect_types=sqlite3.PARSE_DECLTYPES,
                                check_same_thread=False)

    def tanca(self):
        self.connexió.close()
        del self.connexió

    def inicialitza(self):
        cursor = self.connexió.cursor()
        for s in self:
            seient = (s, '', datetime.datetime.now())
            count = cursor.execute(self.afegir, seient)
        self.connexió.commit()
        cursor.close()
        
    def __getitem__(self, iden):
        c = self.connexió.cursor()
        c.execute(self.selecciona, (iden,))
        return c.fetchone()[1:]

    def __setitem__(self, seient, valor):
        nom, data = valor
        c = self.connexió.cursor()
        c.execute(self.modifica, (nom, data, seient))
        self.connexió.commit()


    def places(self):
        return self.nFiles * 6
    
    def lliure(self, seient):
        return self[seient][0] == ''










    
