from flask import Flask, Blueprint
from flask_restful import Api
from api.resources.civilization import Civilization, CivilizationList
from api.resources.unit import Unit, UnitList
from api.resources.structure import Structure, StructureList
from api.resources.technology import Technology, TechnologyList
from config import API_PREFIX, SWAGGER_CONFIG
from db import db
from flasgger import Swagger

def create_app(cfg):
        app = Flask(__name__)
        app.config.update(cfg)

        api_blueprint = Blueprint(API_PREFIX + "/", __name__)
        api = Api(api_blueprint, prefix="/" + API_PREFIX)

        add_routes(api)
        add_docs(app, SWAGGER_CONFIG, '../data/apispecs.yaml')
        app.register_blueprint(api_blueprint)
        db.init_app(app)

        return app

def add_routes(api):
        # Routes of our application
        api.add_resource(Civilization, '/civilization/<string:_id>')
        api.add_resource(CivilizationList, '/civilizations')
        api.add_resource(Unit, '/unit/<string:_id>')
        api.add_resource(UnitList, '/units')
        api.add_resource(Structure, '/structure/<string:_id>')
        api.add_resource(StructureList, '/structures')
        api.add_resource(Technology, '/technology/<string:_id>')
        api.add_resource(TechnologyList, '/technologies')

def add_docs(app, cfg, template):
        Swagger(app, config=cfg, template_file=template)