# SPDX-License-Identifier: GPL-2.0-or-later

from .base_exporter import BasePrimitiveDXFExporter


class TextDXFExporter(BasePrimitiveDXFExporter):
    pass

#-----------------------------------------------------
def exportText(ob, mx, mw, **common):
    """converts Text-Object to desired projection and representation(DXF-Entity type)
    """
    text3d = ob.getData()
    textstr = text3d.getText()
    WCS_loc = ob.loc # WCS_loc is object location in WorldCoordSystem
    sizeX = ob.SizeX
    sizeY = ob.SizeY
    sizeZ = ob.SizeZ
    rotX  = ob.RotX
    rotY  = ob.RotY
    rotZ  = ob.RotZ
    #print 'deb: sizeX=%s, sizeY=%s' %(sizeX, sizeY) #---------

    Thickness,Extrusion,ZRotation,Elevation = None,None,None,None

    AXaxis = mx[0].copy().resize3D() # = ArbitraryXvector
    if not PROJECTION:
        #Extrusion, ZRotation, Elevation = getExtrusion(mx)
        Extrusion, AXaxis = getExtrusion(mx)

        # no thickness/width for TEXTs converted into ScreenCS
        if text3d.getExtrudeDepth():
            Thickness = text3d.getExtrudeDepth() * sizeZ

    #Horizontal text justification type, code 72, (optional, default = 0)
    # integer codes (not bit-coded)
    #0=left, 1=center, 2=right
    #3=aligned, 4=middle, 5=fit
    Alignment = None
    alignment = text3d.getAlignment().value
    if alignment in {1, 2}: Alignment = alignment

    textHeight = text3d.getSize() / 1.7
    textFlag = 0
    if sizeX < 0.0: textFlag |= 2 # set flag for horizontal mirrored
    if sizeZ < 0.0: textFlag |= 4 # vertical mirrored

    entities = []
    c = text_as_list[GUI_A['text_as'].val]

    if c=="TEXT": # export text as TEXT
        if not PROJECTION:
            ZRotation,Zrotmatrix,OCS_origin,ECS_origin = getTargetOrientation(mx,Extrusion,\
                AXaxis,WCS_loc,sizeX,sizeY,sizeZ,rotX,rotY,rotZ)
            ZRotation *= r2d
            point = ECS_origin
        else:    #TODO: fails correct location
            point1 = mathutils.Vector(ob.loc)
            [point] = projected_co([point1], mx)
            if PERSPECTIVE:
                clipStart = 10.0
                coef = -clipStart / (point1 @ mx)[2]
                textHeight *= coef
                #print 'deb: coef=', coef #--------------

        #print 'deb: point=', point #--------------
        [point] = toGlobalOrigin([point])
        point2 = point

        #if DEBUG: text_drawBlender(textstr,points,OCS_origin) #deb: draw to scene
        common['extrusion']= Extrusion
        #common['elevation']= Elevation
        common['thickness']= Thickness
        #print 'deb: common=', common #------------------
        if 0: #DEBUG
            #linepoints = [[0,0,0], [AXaxis[0],AXaxis[1],AXaxis[2]]]
            linepoints = [[0,0,0], point]
            dxfLINE = DXF.Line(linepoints,**common)
            entities.append(dxfLINE)

        dxfTEXT = DXF.Text(text=textstr,point=point,alignment=point2,rotation=ZRotation,\
            flag=textFlag,height=textHeight,justifyhor=Alignment,**common)
        entities.append(dxfTEXT)
        if Thickness:
            common['thickness']= -Thickness
            dxfTEXT = DXF.Text(text=textstr,point=point,alignment=point2,rotation=ZRotation,\
                flag=textFlag,height=textHeight,justifyhor=Alignment,**common)
            entities.append(dxfTEXT)
    return entities
