class SlackSmartBot
  def remove_admin(user, admin_user)
    save_stats(__method__)
    if Thread.current[:dest][0]=='D'
      respond "This command cannot be called from a DM"
    else

      if Thread.current[:typem] == :on_call
        channel = Thread.current[:dchannel]
      elsif Thread.current[:using_channel].to_s==''
        channel = Thread.current[:dest]
      else
        channel = Thread.current[:using_channel]
      end
      messages = []
      admins = config.masters.dup
      team_id_admins = config.team_id_masters.dup
      channels = get_channels()
      channel_found = channels.detect { |c| c.id == channel }
      if !channel_found.nil? and channel_found.creator.to_s != ''
        creator_info = find_user(channel_found.creator)
        admins << creator_info.name
        team_id_admins << "#{creator_info.team_id}_#{creator_info.name}"
      end
      if Thread.current[:typem] == :on_bot or Thread.current[:typem] == :on_master
        admins << config.admins.dup
        team_id_admins << config.team_id_admins.dup
      end
      if @admins_channels.key?(channel) and @admins_channels[channel].size > 0
        team_id_admins << @admins_channels[channel]
        #remove the team_id from the names on @admins_channels
        admins << @admins_channels[channel].map { |a| a.split('_')[1..-1].join('_') }
      end
      admins.flatten!
      admins.uniq!
      admins.delete(nil)
      team_id_admins.flatten!
      team_id_admins.uniq!
      team_id_admins.delete(nil)

      if team_id_admins.include?("#{user.team_id}_#{user.name}")
        admin_info = find_user(admin_user)
        if creator_info.name == admin_info.name and creator_info.team_id == admin_info.team_id
          messages << "This user created the channel and cannot be removed as an admin."
        elsif config.team_id_masters.include?("#{admin_info.team_id}_#{admin_info.name}") or config.team_id_masters.include?(admin_user)
          messages << "Master admins cannot be removed as admins of this channel."
        elsif config.team_id_admins.include?("#{admin_info.team_id}_#{admin_info.name}") or config.team_id_admins.include?(admin_user)
          messages << "This user is a defaulted admin for this channel and cannot be removed using this command."
        elsif !team_id_admins.include?("#{admin_info.team_id}_#{admin_info.name}")
          messages << "This user is not an admin of this channel."
        else
          @admins_channels[channel] ||= []
          @admins_channels[channel].delete("#{admin_info.team_id}_#{admin_info.name}")
          update_admins_channels()
          messages << "The user is not an admin of this channel from now on."
          admins.delete(admin_info.name)
          team_id_admins.delete("#{admin_info.team_id}_#{admin_info.name}")
        end
        messages << "*Admins*: <@#{admins.join('>, <@')}>"
      else
        messages << "Only the creator of the channel, Master admins or admins can remove an admin of this channel."
        messages << "*Admins*: <@#{admins.join('>, <@')}>"
      end

      respond messages.join("\n")
    end
  end
end