//
//  KeyboardViewController.m
//  CustomKeyboard
//
//  Created by Mac on 2025/10/27.
//

#import "KeyboardViewController.h"
#import "KBKeyBoardMainView.h"

#import "KBKey.h"
#import "KBFunctionView.h"
#import "Masonry.h"

static CGFloat KEYBOARDHEIGHT = 256;

@interface KeyboardViewController () <KBKeyBoardMainViewDelegate>
@property (nonatomic, strong) UIButton *nextKeyboardButton; // 系统“下一个键盘”按钮（可选）
@property (nonatomic, strong) KBKeyBoardMainView *keyBoardMainView;   // 功能面板视图（点击工具栏第0个时显示）
@property (nonatomic, strong) KBFunctionView *functionView;   // 功能面板视图（点击工具栏第0个时显示）
@end

@implementation KeyboardViewController

- (void)updateViewConstraints {
    [super updateViewConstraints];
    
    // 可在此添加自定义尺寸约束
}

- (void)viewDidLoad {
    [super viewDidLoad];
    [self setupUI];
}


- (void)setupUI {
    // 固定键盘整体高度
    [self.view.heightAnchor constraintEqualToConstant:KEYBOARDHEIGHT].active = YES;
    // 预置功能面板（默认隐藏），与键盘区域共享相同布局
    self.functionView.hidden = YES;
    [self.view addSubview:self.functionView];
    [self.functionView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.right.equalTo(self.view);
        make.top.equalTo(self.view).offset(4);
        make.bottom.equalTo(self.view.mas_bottom).offset(-4);
    }];
    
    self.keyBoardMainView.delegate = self;
    [self.view addSubview:self.keyBoardMainView];
    [self.keyBoardMainView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.right.equalTo(self.view);
        make.top.equalTo(self.view).offset(4);
        make.bottom.equalTo(self.view.mas_bottom).offset(-4);
    }];
}



#pragma mark - Private

/// 切换显示功能面板/键盘主视图
- (void)showFunctionPanel:(BOOL)show {
    // 简单显隐切换，复用相同的布局区域
    self.functionView.hidden = !show;
    self.keyBoardMainView.hidden = show;

    // 可选：把当前显示的视图置顶，避免层级遮挡
    if (show) {
        [self.view bringSubviewToFront:self.functionView];
    } else {
        [self.view bringSubviewToFront:self.keyBoardMainView];
    }
}



// MARK: - KBKeyBoardMainViewDelegate

- (void)keyBoardMainView:(KBKeyBoardMainView *)keyBoardMainView didTapKey:(KBKey *)key {
    switch (key.type) {
        case KBKeyTypeCharacter:
            [self.textDocumentProxy insertText:key.output ?: key.title ?: @""]; break;
        case KBKeyTypeBackspace:
            [self.textDocumentProxy deleteBackward]; break;
        case KBKeyTypeSpace:
            [self.textDocumentProxy insertText:@" "]; break;
        case KBKeyTypeReturn:
            [self.textDocumentProxy insertText:@"\n"]; break;
        case KBKeyTypeGlobe:
            [self advanceToNextInputMode]; break;
        case KBKeyTypeCustom:
            [self.textDocumentProxy insertText:@"[lang]"]; break;
        case KBKeyTypeModeChange:
        case KBKeyTypeShift:
            // 这些已在 KBKeyBoardMainView/KBKeyboardView 内部处理
            break;
    }
}

- (void)keyBoardMainView:(KBKeyBoardMainView *)keyBoardMainView didTapToolActionAtIndex:(NSInteger)index {
    // 符合你的要求：由控制器来切换面板
    if (index == 0) {
        [self showFunctionPanel:YES];
    } else {
        [self showFunctionPanel:NO];
    }
}

#pragma mark - lazy
- (KBKeyBoardMainView *)keyBoardMainView{
    if (!_keyBoardMainView) {
        _keyBoardMainView = [[KBKeyBoardMainView alloc] init];
    }
    return _keyBoardMainView;
}

- (KBFunctionView *)functionView{
    if (!_functionView) {
        _functionView = [[KBFunctionView alloc] init];
    }
    return _functionView;
}

@end


