# Copyright (C) Ivan Kravets <me@ikravets.com>
# See LICENSE for details.

from glob import glob
from os import listdir
from os.path import basename, isdir, join

import bottle

from platformio import util


class ProjectGenerator(object):

    def __init__(self, project_dir, ide):
        self.project_dir = project_dir
        self.ide = ide
        self._tplvars = self._gather_tplvars()

    @staticmethod
    def get_supported_ides():
        tpls_dir = join(util.get_source_dir(), "ide", "tpls")
        return [d for d in listdir(tpls_dir)
                if isdir(join(tpls_dir, d))]

    @staticmethod
    def get_project_env():
        data = {}
        config = util.get_project_config()
        for section in config.sections():
            if not section.startswith("env:"):
                continue
            for k, v in config.items(section):
                data[k] = v
        return data

    def get_project_name(self):
        return basename(self.project_dir)

    def get_tpls(self):
        tpls_dir = join(util.get_source_dir(), "ide", "tpls", self.ide)
        return glob(join(tpls_dir, ".*.tpl")) + glob(join(tpls_dir, "*.tpl"))

    def generate(self):
        for tpl_path in self.get_tpls():
            file_name = basename(tpl_path)[:-4]
            with open(join(self.project_dir, file_name), "w") as f:
                f.write(self._render_tpl(tpl_path))

    def _render_tpl(self, tpl_path):
        content = ""
        with open(tpl_path) as f:
            content = f.read()
        return bottle.template(content, **self._tplvars)

    def _gather_tplvars(self):
        data = self.get_project_env()

        data.update({
            "project_name": self.get_project_name()
        })

        return data

@@ -978,16 +978,110 @@
 t_dir)%0A%0A
+    def get_includes(self):%0A        return %5B%5D%0A%0A    def get_srcfiles(self):%0A        return %5B%5D%0A%0A
     def 
@@ -1088,32 +1088,32 @@
 get_tpls(self):%0A
-
         tpls_dir
@@ -1420,32 +1420,63 @@
 me), %22w%22) as f:%0A
+                print tpl_path%0A
                 
@@ -1785,16 +1785,16 @@
 pdate(%7B%0A
-
         
@@ -1836,16 +1836,106 @@
 t_name()
+,%0A            %22includes%22: self.get_includes(),%0A            %22srcfiles%22: self.get_srcfiles()
 %0A       

Add prototypes for includes/srcfiles