#import "TGConversationFooterController.h"

NSString *const TGConversationFooterIdentifier = @"TGConversationFooter";

@implementation TGConversationFooterController

- (void)setOptions:(TGConversationFooterOptions)options
{
    [self setOptions:options animated:false];
}

- (void)setOptions:(TGConversationFooterOptions)options animated:(bool)animated
{
    void (^changeBlock)() = ^
    {
        if (options == _options)
            return;
        
        _options = options;
        
        bool isSendMessage = options & TGConversationFooterOptionsSendMessage;
        bool isStartBot = options & TGConversationFooterOptionsStartBot;
        bool isRestartBot = options & TGConversationFooterOptionsRestartBot;
        bool isUnblock = options & TGConversationFooterOptionsUnblock;
        bool isInactive = options & TGConversationFooterOptionsInactive;
        
        bool hasCommandsButton = options & TGConversationFooterOptionsBotCommands;
        bool hasKeyboardButton = options & TGConversationFooterOptionsBotKeyboard;
        bool hasVoiceButton = options & TGConversationFooterOptionsVoice;
        
        if (isSendMessage)
        {
            self.attachmentsGroup.hidden = false;
            self.bottomButton.hidden = false;
            self.bottomButton.title = TGLocalized(@"Watch.Conversation.Reply");
            
            NSInteger buttonCount = 2;
            CGFloat buttonWidth = 0.5f;
            if (hasCommandsButton || hasKeyboardButton)
                buttonCount += 1;
            if (hasVoiceButton)
                buttonCount += 1;
            
            buttonWidth = 1.0f / buttonCount;
            
            bool commandButtonHidden = (!hasCommandsButton && !hasKeyboardButton);
            [self.commandsButton setHidden:commandButtonHidden];
            [self.voiceButton setHidden:!hasVoiceButton];
            
            if (!commandButtonHidden)
                [self.commandsIcon setImageNamed:hasCommandsButton ? @"BotCommandIcon": @"BotKeyboardIcon"];
            
            [self.commandsButton setRelativeWidth:commandButtonHidden ? 0.0 : buttonWidth withAdjustment:0];
            [self.voiceButton setRelativeWidth:!hasVoiceButton ? 0.0 : buttonWidth withAdjustment:0];
            [self.stickerButton setRelativeWidth:buttonWidth withAdjustment:0];
            [self.locationButton setRelativeWidth:buttonWidth withAdjustment:0];
        }
        else if (isStartBot)
        {
            self.attachmentsGroup.hidden = true;
            self.bottomButton.hidden = false;
            self.bottomButton.title = TGLocalized(@"Bot.Start");
        }
        else if (isRestartBot)
        {
            self.attachmentsGroup.hidden = true;
            self.bottomButton.hidden = false;
            self.bottomButton.title = TGLocalized(@"Watch.Bot.Restart");
        }
        else if (isUnblock)
        {
            self.attachmentsGroup.hidden = true;
            self.bottomButton.hidden = false;
            self.bottomButton.title = TGLocalized(@"Watch.Conversation.Unblock");
        }
        else if (isInactive)
        {
            self.attachmentsGroup.hidden = true;
            self.bottomButton.hidden = true;
        }
    };
    
    if (animated)
        self.animate(changeBlock);
    else
        changeBlock();
}

- (IBAction)commandsButtonPressedAction
{
    if (self.commandsPressed != nil)
        self.commandsPressed();
}

- (IBAction)stickerButtonPressedAction
{
    if (self.stickerPressed != nil)
        self.stickerPressed();
}

- (IBAction)locationButtonPressedAction
{
    if (self.locationPressed != nil)
        self.locationPressed();
}

- (IBAction)voiceButtonPressedAction
{
    if (self.voicePressed != nil)
        self.voicePressed();
}

- (IBAction)bottomButtonPressedAction
{
    bool isSendMessage = _options & TGConversationFooterOptionsSendMessage;
    bool isStartBot = _options & TGConversationFooterOptionsStartBot;
    bool isRestartBot = _options & TGConversationFooterOptionsRestartBot;
    bool isUnblock = _options & TGConversationFooterOptionsUnblock;
    
    if (isSendMessage)
    {
        if (self.replyPressed != nil)
            self.replyPressed();
    }
    else if (isStartBot)
    {
        if (self.startPressed != nil)
            self.startPressed();
    }
    else if (isRestartBot)
    {
        if (self.restartPressed != nil)
            self.restartPressed();
    }
    else if (isUnblock)
    {
        if (self.unblockPressed != nil)
            self.unblockPressed();
    }
}

#pragma mark -

+ (NSString *)identifier
{
    return TGConversationFooterIdentifier;
}

@end
