from flask import Flask, render_template

from config import Config
from app.extensions import db
from app.routes import main_bp


def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(config_class)

    db.init_app(app)
    app.register_blueprint(main_bp)

    @app.template_filter("rupiah")
    def rupiah(value):
        try:
            amount = float(value or 0)
        except (TypeError, ValueError):
            amount = 0
        return "Rp {:,.0f}".format(amount).replace(",", ".")

    @app.template_filter("percent")
    def percent(value):
        try:
            amount = float(value or 0)
        except (TypeError, ValueError):
            amount = 0
        return f"{amount:.2f}%"

    @app.errorhandler(404)
    def not_found(error):
        return render_template("errors/404.html"), 404

    @app.errorhandler(500)
    def server_error(error):
        return render_template("errors/500.html"), 500

    return app

