import Konva from "konva";

const baifang=function (option={}) {
  const width=option.width,height=option.height,slList=option.dw,image=require('@/assets/gb.png')
  const _width=width*0.4-50,_height=height*0.81
  const container=function (){
    const x=width*0.6+40,y=190

    const group=new Konva.Group({
      x:x,
      y:y,
      width:_width,
      height:_height
    })

    // const rect=createRect(x,y)
    // group.add(rect)

    return group
  }

  const createRect=function (){
    const rect=new Konva.Rect({
      x:0,
      y:0,
      width:_width,
      height:_height,
      stroke:'black',
      strokeWidth:1,
    })
    return rect
  }

  let slGroup=container()

  const thatHeight=height
  const gangban=function (index,item){
    const group=new Konva.Group({
      x:0,
      y:thatHeight-260-index*40,
      draggable:true
    })

    group.setAttr('index',index)

    slGroup.add(group)
    const {x}=group.absolutePosition()
    group.dragBoundFunc(function (pos){
      return {
        x:x,
        y:pos.y
      }
    })
    let _index=0

    group.on('dragstart',function (){
      console.log(this)
      const {x,y}=this.absolutePosition()
      this.startPos={
        x:x,
        y:y
      }
    })
    group.on('dragmove',function (){
      if(_index===0){
        _index=this.getAttr('index')
      }
      this.zIndex(999)
      const {y:thisY}=this.absolutePosition()

      const dir=thisY-this.startPos.y>0?-40:40

      const children=slGroup.children

      for (const child of children) {
        if (child===this){
          return
        }

        const {y:thatY}=child.absolutePosition()
        const moveDir=child.getAttr('moveDir')||0
        if (thisY>=thatY&&thisY<=thatY+40&&moveDir!==dir){
          child.setAttr('moveDir',dir);
          _index+=dir>0?1:-1
          child.move({
            y:dir
          })
          this.startPos={
            x:x,
            y:thisY
          }
        }

      }
    })

    group.on('dragend',function (){
      const index=this.getAttr('index')
      const element = slList.splice(index-1, 1)[0];
      slList.splice(_index-1, 0, element);
      this.setAttr('index',_index)
      _index=0
      handler(slList)
    })

    const indexRect=new Konva.Rect({
      x:0,
      y:0,
      width:40,
      height:40,
      stroke:'black',
      strokeWidth:1,
    })
    //group.add(indexRect)

    const indexText=new Konva.Text({
      x:0,
      y:0,
      width:40,
      height:40,
      fill:'black',
      text:index,
      align:'center',
      verticalAlign:'middle',
    })
    group.add(indexText)

    //层  规格,套料图 船号,上料日期,计划切割日期
    const imageObj = new Image();
    const imgSize=200
    imageObj.src = image;
    imageObj.onload = function () {
      const shape = new Konva.Image({
        x: 60,
        y: 0,
        width: imgSize,
        height:40,
        image: imageObj,
      });
      group.add(shape)
      const gbText=new Konva.Text({
        x: 60,
        y: 0,
        width: imgSize,
        height:40,
        fill:'black',
        text:`${item.wph||''},${item.wpgg}`,
        align:'center',
        verticalAlign:'middle',
      })
      group.add(gbText)
    }

    const concent=new Konva.Text({
      x: imgSize+60,
      y: 0,
      width: imgSize+40,
      height:40,
      fill:'black',
      text:`${item.czbh},${item.pl},${item.fd}\n上料:${item.sljhrq},切割:${item.qgjhrq||''}`,
      align:'center',
      verticalAlign:'middle',
    })
    group.add(concent)

  }

  function handler(slList){
    slGroup.destroyChildren()
    const rect=createRect()
    slGroup.add(rect)
    for (let i = 1; i <= slList.length; i++) {
      const item=slList[i-1]
      gangban(i,item,item.length)
    }
  }

  handler(slList)

  return {
    container,slGroup,handler
  }
}

export default baifang