�
D�h � �h � d Z ddlZddlZddlmZmZmZ ej d� � Z G d� d� � Z dS )z9
Board layer command implementations for KiCAD interface
� N)�Dict�Any�Optional�kicad_interfacec �� � e Zd ZdZddeej fd�Zdee e
f dee e
f fd�Zdee e
f dee e
f fd�Zdee e
f dee e
f fd �Z
d
e defd�Zdede fd
�ZdS )�BoardLayerCommandszHandles board layer operationsN�boardc � � || _ dS )z'Initialize with optional board instanceN)r )�selfr s �1c:\repo\KiCAD-MCP\python\commands\board\layers.py�__init__zBoardLayerCommands.__init__ s
� ���
�
�
� �params�returnc �( � | j sdddd�S |� d� � }|� d� � }|� d� � }|� d� � }|r|r|sdd d
d�S | j � � � }d}|dk r|�dd
dd�S t j |dz
z }n%|dk r
t j }n|dk rt j }|�dddd�S |� ||� � |� || � |� � � � | j �
|d� � dd|� �||||d�d�S # t $ rG}t �
dt |� � � �� � ddt |� � d�cY d}~S d}~ww xY w)zAdd a new layer to the PCBF�No board is loaded�Load or create a board first��success�message�errorDetails�name�type�position�numberzMissing parametersz%name, type, and position are requiredN�innerzMissing layer numberz#number is required for inner layers� �top�bottomzInvalid layer positionz,position must be 'top', 'bottom', or 'inner'Tz
Added layer: )r r r r �r r �layerzError adding layer: zFailed to add layer)r �get�
GetLayerStack�pcbnew�In1_Cu�F_Cu�B_Cu�SetLayerName�SetLayerType�_get_layer_type�SetLayerEnabled� Exception�logger�error�str) r r r �
layer_typer r �layer_stack�layer_id�es r � add_layerzBoardLayerCommands.add_layer s> � �E ��:�
�$�3�$B�� � � �:�:�f�%�%�D����F�+�+�J��z�z�*�-�-�H��Z�Z��)�)�F��
�z�
��
�$�3�$K�� � � �*�2�2�4�4�K� �H��7�"�"��>�#(�#9�(M�� � �
"�=�F�Q�J�7����U�"�"�!�;����X�%�%�!�;����$�7�$R�� � �
�$�$�X�t�4�4�4��$�$�X�t�/C�/C�J�/O�/O�P�P�P�
�J�&�&�x��6�6�6� �1�4�1�1� �&� (�$� � � � �
�� � � � ��L�L�8��A���8�8�9�9�9� �0� #�A���� �
�
�
�
�
�
����� ���s6 �E �AE �/(E �?E �A'E �
F�
<F�F�Fc � � | j sdddd�S |� d� � }|sdddd�S | j � |� � }|dk r
dd d
|� d�d�S | j � |� � dd
|� �||d�d�S # t $ rG}t
� dt |� � � �� � ddt |� � d�cY d}~S d}~ww xY w)z'Set the active layer for PCB operationsFr r r r! zNo layer specifiedzlayer parameter is requiredr zLayer not foundzLayer 'z' does not existTzSet active layer to: )r �idr zError setting active layer: zFailed to set active layerN)r r"