# -*- coding: utf-8 -*-
from maya import cmds
from maya.api import OpenMaya as om
import ssds

def maya_useNewAPI(): pass


def initializePlugin(plugin):
    fnPlugin = om.MFnPlugin(plugin, vendor = 'Mukai Lab.', version = 'v.2019.1.21')
    try:
        createUI()
    except: raise
 
    
def uninitializePlugin(plugin):
    fnPlugin = om.MFnPlugin(plugin)
    try:
        deleteUI()
    except: raise


def createUI():
    cmds.setParent('MayaWindow')
    try:
        cmds.menu('MukaiLab', query = True, label = True)
    except:
        cmds.menu('MukaiLab', label = 'MukaiLab')
    cmds.setParent('MukaiLab', menu = True)
    cmds.menuItem('SSDS', label = 'SSDS', command = showBuildWindow)


def deleteUI():
    try:
        cmds.deleteUI('SSDS', menuItem = True)
    except: pass
    try:
        itemArray = cmds.menu('MukaiLab', query = True, itemArray = True)
        if itemArray == None:
            cmds.deleteUI('MukaiLab')
    except: pass


uiWindowName = 'SsdsWindow'
uiFormName = 'SsdsWindowForm'
uiFormLayoutName = 'SsdsFormLayout'
uiBuildButtonName = 'SsdsBuildButton'
uiMaxInfluenceName = ('SsdsMaxInfluenceLayout', 'SsdsMaxInfluenceField')
uiNumJointsName = ('SsdsNumJointsLayout', 'SsdsNumJointsField')
uiNumIterationsName = ('SsdsNumIterationsLayout', 'SsdsNumIterationsField')
uiTransformRadioCollectionName = 'SsdsTransformRadioCollection'
uiTransformNames = ('SsdsTransformT', 'SsdsTransformRT', 'SsdsTransformSRT')
uiConcentrateName = ('SsdsConcentrateLayout', 'SsdsConcentrateField')


def invokeBuild(arg):
    maxInfluence = cmds.intField(uiMaxInfluenceName[1], query = True, value = True)
    numJoints = cmds.intField(uiNumJointsName[1], query = True, value = True)
    numIterations = cmds.intField(uiNumIterationsName[1], query = True, value = True)
    transformStr = cmds.radioCollection(uiTransformRadioCollectionName, query = True, select = True)
    transformType = uiTransformNames.index(transformStr)
    concentrate = cmds.floatField(uiConcentrateName[1], query = True, value = True)

    cmds.undoInfo(openChunk = True)
    try:
        ssds.build(numJoints = numJoints,
                    transformType = transformType,
                    numMaxInfluences = maxInfluence,
                    numIterations = numIterations,
                    concentrate = concentrate)
    except Exception as e:
        raise e
    finally:
        cmds.undoInfo(closeChunk = True)


def showBuildWindow(arg):
    labelWidth = 100
    fieldWidth = 100

    cmds.window(uiWindowName, title = 'SSDS')
    cmds.formLayout(uiFormName)
    cmds.columnLayout(uiFormLayoutName, rowSpacing = 5)

    # joints
    cmds.rowLayout(uiNumJointsName[0], numberOfColumns = 2,
                   columnWidth2 = (labelWidth, fieldWidth),
                   columnAlign2 = ('right', 'right'))
    cmds.text(label = '# Joints')
    cmds.intField(uiNumJointsName[1], minValue = 0, maxValue = 100, value = 1, width = fieldWidth)
    cmds.setParent('..')

    # max influences
    cmds.rowLayout(uiMaxInfluenceName[0], numberOfColumns = 2,
                   columnWidth2 = (labelWidth, fieldWidth),
                   columnAlign2 = ('right', 'right'))
    cmds.text(label = 'Max Influences')
    cmds.intField(uiMaxInfluenceName[1], minValue = 1, maxValue = 8, value = 4, width = fieldWidth)
    cmds.setParent('..')

    # iterations
    cmds.rowLayout(uiNumIterationsName[0], numberOfColumns = 2,
                   columnWidth2 = (labelWidth, fieldWidth),
                   columnAlign2 = ('right', 'right'))
    cmds.text(label = '# Iterations')
    cmds.intField(uiNumIterationsName[1], minValue = 0, maxValue = 100, value = 10, width = fieldWidth)
    cmds.setParent('..')

    # transform type
    cmds.rowLayout('SsdsTransformTypeLayout', numberOfColumns = 2,
                   columnWidth2 = (labelWidth, fieldWidth),
                   columnAlign2 = ('right', 'right'))
    cmds.text(label = 'Transform Type')
    cmds.columnLayout('temporary', rowSpacing = 3)
    cmds.radioCollection(uiTransformRadioCollectionName)
    cmds.radioButton(uiTransformNames[0], label = 'T')
    cmds.radioButton(uiTransformNames[1], label = 'R+T')
    cmds.radioButton(uiTransformNames[2], label = 'S+R+T')
    cmds.radioCollection(uiTransformRadioCollectionName, edit = True, select = uiTransformNames[2])
    cmds.setParent(uiFormLayoutName)

    # concentrate
    cmds.rowLayout(uiConcentrateName[0], numberOfColumns = 2,
                   columnWidth2 = (labelWidth, fieldWidth),
                   columnAlign2 = ('right', 'right'))
    cmds.text(label = 'Concentrate')
    cmds.floatField(uiConcentrateName[1], minValue = 0, maxValue = 100, value = 0.0, precision = 3, width = fieldWidth)
    cmds.setParent('..')

    # build
    cmds.button(uiBuildButtonName, label='Build', command = invokeBuild, width = labelWidth + fieldWidth)
    
    cmds.formLayout(uiFormName, edit = True,
                    attachForm = [(uiFormLayoutName, 'top', 5),
                                  (uiFormLayoutName, 'left', 5),
                                  (uiFormLayoutName, 'right', 5)])
    cmds.showWindow(uiWindowName)