#------------------------------------------------
#   KZライブラリ    test_sel / 連結線
#                   Ver 2.07.26
#                   written by Fukurou
#------------------------------------------------
import bpy
import blf
import gpu
import math
import numpy as np
import mathutils

from gpu_extras.batch import batch_for_shader
from bpy.types import Operator
from bpy_extras import view3d_utils
from mathutils import Vector
from bpy.props import *
from . module import kzb_mod_base
from . module import utils_roof
from . class_edgepoints import ARCHI_OT_Mouse_EdgePoints

#-----------------------------------------------------------
# プレート設定
#-----------------------------------------------------------
class ARCHI_OT_Test1Posset(ARCHI_OT_Mouse_EdgePoints):
    bl_idname = 'test1.comp_points'
    bl_label  = 'プレート'
    bl_description = "コンポーネントから読み取った頂点で形成される輪郭線からフレーム（壁）を作成する。通常輪郭線を中心に、外側厚みはプラスで内側厚みはマイナスで指定する。"
    bl_options = {'UNDO'}

    count = 100
    def comp_main(self, context):
        print("■マウス入力数＝", len(self.mouse_post))
        ARCHI_OT_Test1Create.mouse_post = self.mouse_post
        #ダイアログクラス呼出
        bpy.ops.test1.comp_create('INVOKE_DEFAULT')

#-----------------------------------------------------------
# ダイアログインプット
#-----------------------------------------------------------
class ARCHI_OT_Test1Create(Operator):
    bl_idname  = "test1.comp_create"
    bl_label   = "プレート"
    bl_options = {'REGISTER', 'UNDO'}
    
    #クラス変数
    mouse_post = []
    #プロパティ
    depth: FloatProperty(
        name="厚　　さ",
        description="",
        default = 1,
        precision=3,
    )
    offset: FloatProperty(
        name="オフセット",
        description="",
        default = 0.0,
        precision=3,
    )

    # ダイアログのレイアウト
    def draw(self, context):
        layout = self.layout
        col = layout.column()
        col.use_property_split = True   #メニューを分割表示
        col.prop(self, "depth")        
        col.prop(self, "offset")                    
        
    # 呼び出し時の処理
    def invoke(self, context, event):
        # ダイアログの呼び出し
        return context.window_manager.invoke_props_dialog(self)

    # Operator実行時の処理
    def execute(self, context):
        print("◎マウス入力数＝", len(self.mouse_post))
        utils_roof.kawara_kirituma(self.mouse_post)
        return {'FINISHED'}    


def test_work(verts):
    p1 = verts[0]
    p2 = verts[1]
    p3 = verts[2]
    v1 = p2 - p1
    v2 = p3 - p2
    p0 = p1 + v2 / 2.0              #基点
    rads = math.atan2(v2[1], v2[0]) #配置角度
    h = v2[2]
    height = v1.length
    width  = v2.length
    radk = math.asin(-v1[2]/height)  #勾配
    #p0 = Vector((0,0,0))
    utils_roof.make_kawara(p0, width, height, rads, radk)
    #utils_roof.make_kawara(p0, width, height, 0, 0)
    
    print(f"P0:{p0}  width:{width}  height:{height}")
 
#---------------------------------------------------------------------
#   クラスリスト
#---------------------------------------------------------------------
classes = (
    ARCHI_OT_Test1Posset,
    ARCHI_OT_Test1Create,
)

#---------------------------------------------------------------------
#   登録
#---------------------------------------------------------------------
def register():
    for cls in classes:
        bpy.utils.register_class(cls)

#---------------------------------------------------------------------
#   登録解除
#---------------------------------------------------------------------
def unregister():
    for cls in reversed(classes):
        bpy.utils.unregister_class(cls)


