from pathlib import Path

import axipy as axp
from PySide2 import QtWidgets as Qw
from PySide2.QtCore import Qt


def show_dialog():
    title = 'Создание новой таблицы из существующей'
    if not axp.data_manager.tables:
        Qw.QMessageBox.warning(axp.view_manager.global_parent, title, 'Не найдено ни одной открытой таблицы')
        return
    cb_table = Qw.QComboBox()
    cb_table.addItems(tbl.name for tbl in axp.data_manager.tables)

    button_box = Qw.QDialogButtonBox()
    button_box.setStandardButtons(Qw.QDialogButtonBox.Cancel | Qw.QDialogButtonBox.Ok)

    layout = Qw.QVBoxLayout()
    layout.addWidget(cb_table)
    layout.addWidget(button_box)

    dlg = Qw.QDialog(axp.view_manager.global_parent)
    dlg.setWindowTitle(title)
    dlg.setWindowFlags(dlg.windowFlags() & ~Qt.WindowContextHelpButtonHint)  # Выключение значка "?"
    dlg.setMinimumWidth(400)
    dlg.setLayout(layout)

    button_box.accepted.connect(dlg.accept)
    button_box.rejected.connect(dlg.reject)

    if dlg.exec() != Qw.QDialog.Accepted:
        return

    src_table = axp.data_manager[cb_table.currentText()]
    path = Path(src_table.properties['fileName'])
    dst_file, _ = Qw.QFileDialog.getSaveFileName(axp.view_manager.global_parent, title, str(path.parent),
                                                 'MapInfo File (*.tab)')

    if not dst_file:
        return

    definition = {
        'src': dst_file,
        'schema': src_table.schema
    }

    dst_table = axp.provider_manager.create(definition)
    if dst_table.is_spatial:
        mv = axp.view_manager.active
        lr = axp.Layer.create(dst_table)
        if isinstance(mv, axp.MapView):
            mv.map.layers.append(lr)
            mv.map.layers.move(mv.map.layers.count-1, 0)
        else:
            axp.view_manager.create_mapview(axp.Map([lr]))
    else:
        axp.view_manager.create_tableview(dst_table)


show_dialog()
