from bottle import route, run, template, request, response
from os import walk
import os.path
from time import strftime
from time import localtime

backups_root = '/home/ftp_root/asiakkaat/visionbackups'

def getLabel(filename):
    label = ''
    vals = filename.split('Backup-')
    if len(vals) == 2:
        part = vals[1].split('-')
        if len(part) > 9:
            timdot = part[9].split('.')
            dbsn = part[0] + '-' + part[1] + '-' + part[2] + '-' + part[3]
            date = part[4] + '-' + part[5] + '-' + part[6]
            time = part[7] + ':' + part[8] + ':' + timdot[0]
            label += date
            label += time
            label += dbsn
            label += vals[0] + 'Backup'
    return label

def readDesc(section,filename,descfile,path,subfolder):
    result = ''
    if not subfolder == '':
        subfolder += '/'
    vals = filename.split('Backup-')
    if len(vals) == 2:
        result = '[%s]\n' % section
        #fn = path + subfolder + filename
        fn = os.path.join(path , subfolder , filename)
        print 'does %s exist' % fn
        if os.path.exists(fn):
            print '%s exists' % fn
            part = vals[1].split('-')
            if len(part) > 9:
                timdot = part[9].split('.')
                dbsn = part[0] + '-' + part[1] + '-' + part[2] + '-' + part[3]
                date = part[4] + '-' + part[5] + '-' + part[6]
                time = part[7] + ':' + part[8] + ':' + timdot[0]
                result += 'DBSN=%s\n' % dbsn
                result += 'Date=%s\n' % date
                result += 'Time=%s\n' % time
            label = vals[0] + 'Backup'
            result += 'Label=%s\n' % label
            result += 'Size=%s\n' % os.path.getsize(fn)
            result += 'Created=%s\n' % strftime( '%Y-%m-%d %H:%M:%S', localtime( os.path.getctime(fn) ) )
            result += 'Modified=%s\n' % strftime( '%Y-%m-%d %H:%M:%S', localtime( os.path.getmtime(fn) ) )
            result += 'Filename=%s\n' % (subfolder + filename)
            if not descfile == '':
                #descfn = path + subfolder + descfile
                descfn = os.path.join(path, subfolder, descfile)
                result += 'Descfile=%s\n' % (subfolder + descfile)
                index = 1
                lines = []
                with open(descfn) as f:
                    lines = f.read().splitlines()
                for line in lines:
                    result += 'Desc%i=' % index
                    result += '%s\n' % line
                    index = index + 1
    #print 'readDesc(section=%s,filename=%s,descfile=%s,path=%s,subfolder=%s) -> %s' % (section,filename,descfile,path,subfolder,result)
    return result

def list_em( path, subfolder ):
    result = []
    files = []
    for ( dirpath, dirnames, filenames ) in walk( path + '/' + subfolder  ):
        files.extend(filenames);
        break
    temp = files[:]
    for fn in files:
        fullname, ext = os.path.splitext( fn )
        if ext == ".txt":
            temp.remove(fn)
            filename, next = os.path.splitext( fullname )
            if next == ".zip":
                if fullname in files:
                    str = getLabel(fullname) + '[@@]' + fullname + '[@@]' + fn + '[@@]' + path + '[@@]' + subfolder
                    result.append( str )
                    temp.remove(fullname)
            elif next == "":
                fullname += ".zip"
                if fullname in files:
                    str = getLabel(fullname) + '[@@]' + fullname + '[@@]' + fn + '[@@]' + path + '[@@]' + subfolder
                    result.append( str )
                    temp.remove(fullname)
    for fn in temp:
        fullname, ext = os.path.splitext( fn )
        if ext == ".zip":
            isbackup = fullname.split('Backup-')
            if len(isbackup) == 2:
                str = getLabel(fn) + '[@@]' + fn + '[@@][@@]' + path + '[@@]' + subfolder
                result.append(str)
    #print 'list_em( path=%s, subfolder=%s) -> %s' % (path, subfolder, result)
    return result

def list_files( path ):
    result = ''
    lines = []
    lines.extend( list_em( path, '' ) )
    lines.extend( list_em( path, 'VisionLINK' ) )
    lines.sort(reverse=True)
    index = 1
    for line in lines:
        part = line.split( '[@@]' )
        #print part
        #print len(part)
        if len(part) == 5:
            section = 'Backup%i' % index
            result += readDesc( section, part[1], part[2], part[3], part[4] )
            index = index + 1
    #print 'list_files(path=%s) -> %s' % (path, result)
    return result

@route('/nsbr/list')
def list(dbsn=None):
    result = ''
    response.content_type = 'text/plain; charset=UTF-8'
    dbsn_raw = request.GET.get('dbsn')
    data = dbsn_raw.split('-')
    if len(data) == 4:
        a = int(data[0])
        b = int(data[1])
        c = int(data[2])
        d = int(data[3])
        sum = a + b + c
        if sum == d:
            dbsn = '%i-' % a
            dbsn += '%i-' % b
            dbsn += '%i-' % c
            dbsn += '%i' % d
            path = os.path.join(backups_root, dbsn)
            result = list_files( path )
    return result

#run(host='laatikko',port=9999)


if __name__ == '__main__':

    def list2(dbsn_raw):
        result = ''
        data = dbsn_raw.split('-')
        if len(data) == 4:
            a = int(data[0])
            b = int(data[1])
            c = int(data[2])
            d = int(data[3])
            sum = a + b + c
            if sum == d:
                dbsn = '%i-' % a
                dbsn += '%i-' % b
                dbsn += '%i-' % c
                dbsn += '%i' % d
                path = os.path.join(backups_root, dbsn)
                result = list_files( path )
        return result

    import sys
    dbsn = sys.argv[1]
    res = list2(dbsn)




