"""
极耳完整流程检测器实现
将 run_all 算法从 ear_fold_detector.py 拆分到独立文件
"""

import numpy as np
from typing import Dict, Any

from .ear_fold_detector import EarFoldDetector


class EarFoldRunAllDetector(EarFoldDetector):
    """极耳完整流程检测器（仅裁切+翻折完整流程）"""

    def __init__(self):
        super().__init__()
        self.name = "极耳完整流程检测器"
        self.description = "极耳裁切+翻折完整流程检测算法"

    def get_available_functions(self) -> Dict[str, str]:
        return {
            'run_all': '完整检测流程（裁切+翻折）'
        }

    def call_function(self, function_name: str, image: np.ndarray, params: Dict[str, Any] = None) -> Dict[str, Any]:
        print("🔍 开始全局翻折检测...")
        print(f"  📷 params: {params}")
        if function_name == 'run_all':
            
            result = self.run_all(image, params)
            return result
        raise ValueError(f"未知的函数名称: {function_name}")

    def detect(self, image: np.ndarray, params: Dict[str, Any] = None) -> Dict[str, Any]:
        """兼容基类接口：该检测器的detect默认走run_all"""
        return self.run_all(image, params)


    def get_config_filename(self) -> str:
        """返回当前检测器的配置文件名"""
        return "ear_fold_run_all_detector_param.json"

    def get_default_parameters(self) -> Dict[str, Any]:
        """
        获取默认参数配置（从原始配置文件中提取）
        """

               # 极耳裁切模型参数
        jrcut_dict = {
            "模型路径": "",
            "置信度": 0.4,
            "裁切IOU阈值": 0.9,
            "输入尺寸": 512,
            "合并检测框": True,
        }
        
        # 极耳裁切用户参数
        jrcut_usr_dict = {
            "上极耳宽度": 400,
            "上极耳高度": 150,
            "下极耳宽度": 400,
            "下极耳高度": 150,
            "极耳宽度扩展冗余": 0.1,
            "极耳高度扩展冗余": 0.2,
            "极耳间距": 800,
            "隔膜获取深度": 0.5,
        }
        
        # 独立置信度参数
        independent_conf = {
            "启用独立置信度": False,
            "极耳置信度": 0.1,
            "折痕置信度": 0.1,
            "月牙置信度": 0.1,
            "极耳内插置信度": 0.1,
            "极耳内嵌置信度": 0.1,
            "分层置信度": 0.1,
        }
        
        # 横向纹理附加检测参数
        # 独立置信度参数默认值
        independent_conf = {
            "启用独立置信度": False,
            "极耳置信度": 0.1,
            "折痕置信度": 0.1,
            "月牙置信度": 0.1,
            "极耳内插置信度": 0.1,
            "极耳内嵌置信度": 0.1,
            "分层置信度": 0.1,
        }
        
        # 横向纹理附加检测参数默认值
        horizontal_texture_param = {
            "横纹最低长宽比": 3.5,
            "横纹最低风险高度": 0.2,
            "横纹最低风险宽度": 0.7,
        }
        
        # 极耳翻折检测模型参数
        deleted_dict = {
            "模型路径": "",
            "置信度阈值": 0.4,
            "IOU阈值": 0.9,
            "输入尺寸": 512,
            "独立置信度参数": independent_conf,
            "横向纹理附加检测": True,
            "横向纹理附加检测参数": horizontal_texture_param,
        }
        
        # 极耳翻折用户参数
        fold_usr_dict = {
            "翻折保护距离（极耳高度比例）": 0.4,
            "翻折起点保护距离（极耳高度比例）": 0.2,
            "翻折起点扩展距离（极耳高度比例）": 0.2,
            "极耳高度（像素）": 150,
            "极耳高度保护阈值": 0.6,
            "极耳宽度（像素）": 400,
            "极耳宽度保护阈值": 1.5,
            "分层保护阈值": 0.2,
            "月牙宽高NG": False,
            "月牙宽度": 0.8,
            "月牙高度": 0.5,
            "启用自动缩放功能": False,
            "检测后图片高度缩放": 1.0,
            "检测后图片宽度缩放": 1.0,
            "启用相对位置筛选器": True,
            "重叠度阈值": 0.8,

            "启用灰度检测": True,
            "灰度范围NG": False,
            "灰度内缩": 0.7,
            "灰度差值MAX": 255,
            "灰度差值MIN": 0,

            "算法存图":False,
            "算法存图路径":"path",
            "算法存图最大占用硬盘(MB)":4096,
        }
        
        # 隔膜检测模型参数
        gm_dict = {
            "模型路径": "",
            "输入尺寸": 256,
        }
        
        # 隔膜用户参数
        gm_usr_dict = {
            "启用隔膜分析": True,
            "隔膜全检": False,
        }

        update_dict = {
            "更新脚本地址":"",
            "更新UI地址":"",
        }        
        # 组织所有参数
        all_parameters = {
            "极耳裁切模型参数": jrcut_dict,
            "极耳裁切用户参数": jrcut_usr_dict,
            "极耳翻折检测模型参数": deleted_dict,
            "极耳翻折用户参数": fold_usr_dict,
            "隔膜检测模型参数": gm_dict,
            "隔膜用户参数": gm_usr_dict,
        }

        return all_parameters
