#!/usr/bin/env python3

from xml.etree import ElementTree
import zipfile

import lesana

import guacamole


XML_NS = '{http://periapsis.org/tellico/}'

# https://docs.kde.org/trunk5/en/extragear-office/tellico/field-type-values.html
F_TYPE_MAP = {
    '1': 'string',
    '2': 'text',
    '3': 'string',
    '4': 'bool',
    '6': 'integer',
    '7': 'url',
    '8': 'list',       # single column table
    '10': 'file',
    '12': 'timestamp',  # date
    '14': 'integer',    # rating

    }


class T2L(guacamole.Command):
    """
    Manage collections
    """

    def register_arguments(self, parser):
        parser.add_argument(
            '-c', '--collection',
            help='Name of the new lesana collection',
            default=None,
            )
        parser.add_argument(
            'file',
            help='Tellico file to convert to lesana.',
            )

    def invoked(self, ctx):
        with zipfile.ZipFile(ctx.args.file, 'r') as zp:
            tree = ElementTree.parse(zp.open('tellico.xml'))
        # open collection
        xml_collection = tree.getroot().find(XML_NS+'collection')

        # get collection settings
        title = xml_collection.attrib['title']
        xml_fields = xml_collection.find(XML_NS+'fields')
        fields = []
        for xf in xml_fields:
            print(xf.attrib)
            f_type = F_TYPE_MAP.get(xf.attrib['format'])
            # TODO: support fields with the multiple values flag
            # (they should probably become lists)
            fields.append({
                'name': xf.attrib['title'],
                'type': f_type,
                })
        # Create a collection with the settings we have loaded
        directory = ctx.args.collection or ctx.args.file.replace(
            '.tc',
            '.lesana'
            )
        lesana.collection.Collection.init(
            directory=directory,
            git_enabled=False,
            settings={
                'name': title,
                'fields': fields,
                }
            )

        # import data



if __name__ == '__main__':
    T2L().main()