import os

CAMERA_DEVICE = "auto"
CAMERA_WIDTH = 640
CAMERA_HEIGHT = 480
CAMERA_FPS = 30

SERIAL_PORT = "auto"
SERIAL_BAUD = 115200

CONFIG_DIR = os.path.dirname(os.path.abspath(__file__))
HOMOGRAPHY_PATH = os.path.join(CONFIG_DIR, "homography.json")
REFERENCE_FRAME_PATH = os.path.join(CONFIG_DIR, "reference_frame.png")

MARKER_HSV_LOWER = (35, 80, 60)
MARKER_HSV_UPPER = (85, 255, 255)
MARKER_MIN_AREA_PX = 150

PATH_HSV_LOWER = (0, 0, 0)
PATH_HSV_UPPER = (180, 255, 60)
PATH_MIN_LENGTH_PX = 40
PATH_SAMPLE_EVERY_PX = 12

OBSTACLE_BACKEND = "cv"
OBSTACLE_MIN_AREA_PX = 600
OBSTACLE_DIFF_THRESHOLD = 30
TFLITE_MODEL_PATH = os.path.join(CONFIG_DIR, "obstacle_model.tflite")
ARM_HSV_LOWER = None
ARM_HSV_UPPER = None
ARM_MASK_WIDTH_MM = 70.0
ARM_TIP_MASK_RADIUS_MM = 35.0
PICKUP_MASK_RADIUS_MM = 35.0

BASE_XY_MM = (0.0, 0.0)
LINK1_MM = 105.0
LINK2_MM = 98.0
BASE_HEIGHT_MM = 60.0
WRIST_OFFSET_DEG = 0.0
TOOL_LENGTH_MM = 0.0

PEN_UP_Z_MM = 40.0
PEN_DOWN_Z_MM = 0.0
GRASP_Z_MM = 10.0

HOME_XY_MM = (0.0, 120.0)
GRIPPER_OPEN_DEG = 90.0
GRIPPER_CLOSED_DEG = 30.0

SERVO_ZERO_DEG = (0.0, 90.0, 0.0, 90.0)
SERVO_SIGN = (1, 1, 1, 1)
JOINT_LIMITS_DEG = {
    "base": (0, 180),
    "shoulder": (0, 180),
    "elbow": (0, 180),
    "wrist": (0, 180),
}
SLEW_MS_PER_DEG = 15.0

STEP_MM = 5.0
DETOUR_CLEARANCE_MM = 30.0
PATH_CORRIDOR_MM = 25.0
TRACE_LOOKAHEAD_MM = 80.0
TRACE_BLOCK_MODE = "skip"
MAX_STEPS_PER_MOVE = 600
BLOCKED_WAIT_S = 0.2
