// Copyright (C) 2017-2025  CEA, EDF
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//

// Author : Anthony Geay (EDF R&D)

%pythoncode %{

def ExtensionsStr(sz=60):
    tab=["No","Yes"]
    isOK=[(elt,tab[int(elt in ActiveExtensions())]) for elt in AllPossibleExtensions()]
    return "\n".join([a+" "+('{:.>%d}'%(sz-len(a)-1)).format(' %s'%b) for a,b in isOK])

def ShowExtensions(sz=60):
    print(ExtensionsStr(sz))
    pass

def AdvancedExtensionsStr(sz=60):
    def SubExtension(allPossibilities,extensionsActivated,pad,tab, sts):
        for elt2 in allPossibilities:
            elt3="%s algorithm for %s"%(elt2,elt)
            sts.append(pad+elt3+" "+('{:.>%d}'%(sz-len(pad)-len(elt3)-1)).format(' %s'%tab[int(elt2 in extensionsActivated)]))
            pass
        pass
    pad="    "
    tab=["No","Yes"]
    aext=ActiveExtensions()
    sts=[]
    for elt in AllPossibleExtensions():
        isOK=elt in aext
        sts.append(elt+" "+('{:.>%d}'%(sz-len(elt)-1)).format(' %s'%tab[isOK]))
        if not isOK:
            continue
        if "Renumb" in elt:
            SubExtension(AllRenumberMethods(),RenumberAvailableMethods(),pad,tab, sts)
            pass
        if "Partit" in elt:
            SubExtension(MEDPartitioner.AllAlgorithms(),MEDPartitioner.AvailableAlgorithms(),pad,tab, sts)
            pass
        pass
    return "\n".join(sts)

def ShowAdvancedExtensions(sz=60):
    print(AdvancedExtensionsStr(sz))

def MEDCouplingWriterHelper(mci,fileName,medFunc):
    import os
    fileWithoutExt,ext=os.path.splitext(fileName)
    if ext in [".med",".rmed",""]:
        outFileName=fileName
        if ext=="":
            outFileName=fileWithoutExt+".med"
        if HasMEDFileExt():
            medFunc(outFileName,mci,True)
            pass
        else:
            raise InterpKernelException("Request for writing \"%s\" MED file, but MED file is not activated in your medcoupling !")
        pass
    elif ext[:3]==".vt" and len(ext)==4:
        mci.writeVTK(fileName)
    else:
        raise InterpKernelException("The extension \"%s\" of input file \"%s\" is not recognized !"%(ext,fileName))
    pass

if HasMEDFileExt():
    def MEDCouplingMesh_write(self,fileName):
        MEDCouplingWriterHelper(self,fileName,WriteMesh)

    def MEDCouplingField_write(self,fileName):
        MEDCouplingWriterHelper(self,fileName,WriteField)

    def MEDCouplingFieldT_copyTimeInfoFrom(self,mlf1ts):
        assert(isinstance(mlf1ts,MEDFileAnyTypeField1TS))
        a,b,c=mlf1ts.getTime()
        self.setTime(c,a,b)
        pass

    MEDCouplingMesh.write=MEDCouplingMesh_write
    del MEDCouplingMesh_write
    MEDCouplingField.write=MEDCouplingField_write
    del MEDCouplingField_write
    MEDCouplingFieldDouble.copyTimeInfoFrom=MEDCouplingFieldT_copyTimeInfoFrom
    MEDCouplingFieldInt.copyTimeInfoFrom=MEDCouplingFieldT_copyTimeInfoFrom
    MEDCouplingFieldFloat.copyTimeInfoFrom=MEDCouplingFieldT_copyTimeInfoFrom
    del MEDCouplingFieldT_copyTimeInfoFrom
    pass
%}
