# Copyright (c) 2026 JSOL CORPORATION
#
# 本スクリプトはMITライセンスのもとで公開しています。
# ライセンス全文は以下を参照してください。
# https://www.jmag-international.com/jp/scriptlibrary/jmag_script_library_mit/

app = designer.GetApplication()

def hasExternalTerminal(circuit):
    """回路の中に外部端子が存在するか確認する。"""
    for i in range(circuit.NumInstances()):
        instance = circuit.GetComponentInstance(i)
        typeName = instance.GetScriptTypeName()
        if typeName in (u"LeftExternalTerminal", u"RightExternalTerminal"):
            return True
    return False

def getComponentNames(circuit):
    """すべての回路素子の名称を取得する。"""
    componentNames = []
    for i in range(circuit.NumComponents()):
        component = circuit.GetComponent(i)
        componentNames.append(component.GetName())
    return componentNames

def createMacro(circuit, componentNames, param):
    """指定した回路素子名からマクロ素子を作成する"""
    macro = circuit.CreateMacro(param[u"title"])
    for componentName in componentNames:
        macro.AddInstance(componentName)
    macro.SetDescription(param[u"description"])
    macro.SetFolder(u"SubCircuit")
    macro.Create()

def main():
    study = app.GetCurrentStudy()
    circuit = study.GetCircuit()
    if not hasExternalTerminal(circuit):
        print(u"マクロ素子作成では、左外部端子素子または右外部端子素子を少なくとも1つ以上含めてください。")
        return
    componentNames = getComponentNames(circuit)
    macroParam = {
        u"title" : u"MacroElem",
        u"description" : u"Macro element T1Set"
    }
    createMacro(circuit, componentNames, macroParam)

main()