Getting index.php instead single.php for displaying posts

Your structures is completely wrong. Remove the template name from your index.php and single.php templates. You only should use those if you create a custom page.php template to let wordpress know it is a custom page. This should apply to your about-page.php, which is also wrongly named, it should be page-about.php. Your index.php looks about right, but your single.php is bit of a mess, that is why wordpress skip that template completely and uses index.php instead.

There is no loop defined in your single.php. The loop looks something like this:

// Start the Loop.
while ( have_posts() ) { 
    the_post(); 

    //Content of the loop goes here, in your case 
    the_content();

}

Go and have a look at the default themes in the WordPress core and see how their templates are put together and how your structures should look like. Working from those themes will guide you in the right direction