# covid19.hackerspace.pl, a covid-formity instance.
# This needs a secret provisioned, create with:
#    kubectl -n covid-formity create secret generic covid-formity --from-literal=postgres_password=$(pwgen 24 1) --from-literal=secret_key=$(pwgen 24 1) --from-literal=oauth2_secret=...

local kube = import "../../kube/kube.libsonnet";
local redis = import "../../kube/redis.libsonnet";
local postgres = import "../../kube/postgres.libsonnet";

{
    local app = self,
    local cfg = app.cfg,
    cfg:: {
        namespace: "covid-formity",
        image: "registry.k0.hswaw.net/informatic/covid-formity@sha256:53c5fb0dbc4a6660ab47e39869a516f1e3f833dee5a03867386771bd9ffaf7b8",
        domain: "covid19.hackerspace.pl",
        altDomains: ["covid.hackerspace.pl", "www.covid.hackerspace.pl"],
    },

    metadata(component):: {
        namespace: app.cfg.namespace,
        labels: {
            "app.kubernetes.io/name": "covid-formity",
            "app.kubernetes.io/managed-by": "kubecfg",
            "app.kubernetes.io/component": component,
        },
    },

    namespace: kube.Namespace(app.cfg.namespace),

    postgres: postgres {
        cfg+: {
            namespace: cfg.namespace,
            appName: "covid-formity",
            database: "covid-formity",
            username: "covid-formity",
            password: { secretKeyRef: { name: "covid-formity", key: "postgres_password" } },
        },
    },

    redis: redis {
        cfg+: {
            namespace: cfg.namespace,
            appName: "covid-formity",
            storageClassName: app.postgres.cfg.storageClassName,
        },
    },

    deployment: kube.Deployment("covid-formity") {
        metadata+: app.metadata("covid-formity"),
        spec+: {
            replicas: 1,
            template+: {
                spec+: {
                    containers_: {
                        web: kube.Container("covid-formity") {
                            image: cfg.image,
                            ports_: {
                                http: { containerPort: 5000 },
                            },
                            env_: {
                                DATABASE_HOSTNAME: "postgres",
                                DATABASE_USERNAME: app.postgres.cfg.username,
                                DATABASE_PASSWORD: app.postgres.cfg.password,
                                DATABASE_NAME: app.postgres.cfg.appName,
                                SPACEAUTH_CONSUMER_KEY: "covid-formity",
                                SPACEAUTH_CONSUMER_SECRET: { secretKeyRef: { name: "covid-formity", key: "oauth2_secret" } },
                                SECRET_KEY: { secretKeyRef: { name: "covid-formity", key: "secret_key" } },
                                SHIPPING_KURJERZY_EMAIL: "qrde@hackerspace.pl",
                                SHIPPING_KURJERZY_PASSWORD: { secretKeyRef: { name: "covid-formity-shipping", key: "kurjerzy_password" } },
                            },
                        },
                    },
                },
            },
        },
    },

    svc: kube.Service("covid-formity") {
        metadata+: app.metadata("covid-formity"),
        target_pod:: app.deployment.spec.template,
        spec+: {
            ports: [
                { name: "http", port: 5000, targetPort: 5000, protocol: "TCP" },
            ],
            type: "ClusterIP",
        },
    },

    ingress: kube.Ingress("covid-formity") {
        metadata+: app.metadata("covid-formity") {
            annotations+: {
                "kubernetes.io/tls-acme": "true",
                "certmanager.k8s.io/cluster-issuer": "letsencrypt-prod",
                "nginx.ingress.kubernetes.io/proxy-body-size": "0",
                "nginx.ingress.kubernetes.io/configuration-snippet": "
                    location /qr1 { rewrite ^/qr1(.*)$ https://covid.hackerspace.pl$1 redirect; }
                    location /video { return 302 https://youtu.be/eC19w2NFO0E; }
                    location /manual { return 302 https://wiki.hackerspace.pl/_media/projects:covid-19:przylbica-instrukcja-v1.0.pdf; }
                ",
            },
        },
        spec+: {
            tls: [
                {
                    hosts: [cfg.domain] + cfg.altDomains,
                    secretName: "covid-formity-tls",
                },
            ],
            rules: [
                {
                    host: dom,
                    http: {
                        paths: [
                            { path: "/", backend: app.svc.name_port },
                        ]
                    },
                }
                for dom in [cfg.domain] + cfg.altDomains
            ],
        },
    },
}
