from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.sql import func
from .system import Persona
from webinterface import db

class Documento(db.Model):

    __tablename__   = 'archivos'
    __table_args__ = { 'schema': 'doc' }
    __bind_key__ = 'system'

    hash            = db.Column(UUID(as_uuid=True), primary_key=True, nullable=False, autoincrement=False)

    nombre          = db.Column(db.String, nullable=False)
    descripcion     = db.Column(db.Text)
    tamano          = db.Column(db.Integer, default=0)

    reemplazahash   = db.Column(UUID(as_uuid=True), db.ForeignKey('doc.archivos.hash'), nullable=True)

    creado          = db.Column(db.DateTime, server_default=func.now())
    autorid         = db.Column(db.BigInteger, db.ForeignKey('usuarios.personas.id'))

    reemplaza       = db.relationship('Documento')
#    evidenciade     = db.relationship('Evidencia')
    autor           = db.relationship('Persona')


    @property
    def humansize(self):
        if self.tamano == 0:
            return "link"

        if self.tamano < 1000:
            return "{} B".format(self.tamano)
        elif self.tamano < 1000000:
            return "{:.2f} KB".format(self.tamano/1024)
        elif self.tamano < 1000000000:
            return "{:.2f} MB".format(self.tamano/1048576)
        else:
            return "{:.2fs} GB".format(self.tamano/1073741824)

    def get_file(self):
        if self.tamano == 0:
            return None
        else:
            hashstr = str(self.hash)
            return 'ilab_app/archivos/{}/{}-{}'.format(hashstr[:2],hashstr, self.nombre[:150])

    def get_dir(self):
        if self.tamano == 0:
            return None
        else:
            hashstr = str(self.hash)
            return 'ilab_app/archivos/{}'.format(hashstr[:2])

    @property
    def placeholder(self):
        if self.tamano > 0:
            return False
        elif self.nombre[:7] == 'http://' or self.nombre[:8] == 'https://':
            return False
        else:
            return True

    # @property
    # def objetivos(self):
    #     for evidencia in self.evidenciade:
    #         yield evidencia.actividad.objetivo
    #
    # @property
    # def visible(self):
    #     from flask import current_app
    #     from ilab_app.models.system import pertenece
    #     comisiones = []
    #     for objetivo in self.objetivos:
    #         comisiones = comisiones + [objetivo.responsableid, objetivo.invitadosid]
    #     return pertenece(0, comisiones)
