# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4

PortSystem          1.0
PortGroup           java 1.0

name                metabase
version             0.57.7
revision            0
categories          databases java
maintainers         {gmail.com:slashapp @slashapp} openmaintainer

homepage            https://www.metabase.com
description         Metabase is an open-source business intelligence platform.\
                    You can use Metabase to ask questions about your data,\
                    or embed Metabase in your app to let your customers explore\
                    their data on their own.
long_description    ${description}

platforms           {darwin any}
supported_archs     noarch
license             MIT

# Metabase JAR files are hosted on their download server with ".x" suffix in version
master_sites        https://downloads.metabase.com/v${version}.x/
dist_subdir         ${name}/${version}
set metabase_jar    ${name}.jar
distfiles           ${metabase_jar}

checksums           rmd160  f764a60a18170fa2733519e4d6d53a4394841c06 \
                    sha256  d7dfabc89c55d18a3757afce13509273781161e4c07fffe9e8fcd5893656bac0 \
                    size    521331842

java.version        11+
java.fallback       openjdk11

use_configure       no
extract {}
build {}
test {}

set metabase_wrapper     ${prefix}/etc/LaunchDaemons/org.macports.${name}/${name}.wrapper
set metabase_exec_dir    ${prefix}/libexec/${name}
set metabase_home_dir    ${prefix}/var/lib/${name}
set metabase_log_dir     ${prefix}/var/log/${name}
set metabase_run_dir     ${prefix}/var/run/${name}
set metabase_db_dir      ${prefix}/var/db/${name}
set metabase_exec        ${metabase_exec_dir}/${metabase_jar}
set metabase_log         ${metabase_log_dir}/${name}.log
set metabase_pid         ${metabase_run_dir}/${name}.pid
set metabase_host        127.0.0.1
set metabase_port        3000
set metabase_user        metabase
set metabase_group       metabase

set metabase_dir_list [list \
    ${metabase_exec_dir} \
    ${metabase_home_dir} \
    ${metabase_log_dir} \
    ${metabase_run_dir} \
    ${metabase_db_dir} \
]

set metabase_exec_list [list \
    ${distpath}/${metabase_jar}
]

foreach d ${metabase_dir_list} {
    destroot.keepdirs-append ${destroot}${d}
}

destroot {
    foreach d ${metabase_dir_list} {
        xinstall -d -m 0755 -g ${metabase_group} -o ${metabase_user} \
            ${destroot}${d}
    }

    foreach f ${metabase_exec_list} {
        xinstall -m 0644 -g ${metabase_group} -o ${metabase_user} \
            ${f} \
            ${destroot}${metabase_exec_dir}
    }
}

post-deactivate {
    # Cleanup all metabase-created files, which are significant
    foreach d ${metabase_dir_list} {
        if {${d} eq ${metabase_db_dir}} {
            set files [glob -nocomplain -directory ${metabase_db_dir} *]
            if {[llength $files] > 1} {
                ui_msg "********************************************************"
                ui_msg "To revert the system after uninstalling the port,"
                ui_msg "delete metabase database files:"
                ui_msg "$ sudo rm -fr ${metabase_db_dir}"
                ui_msg "********************************************************"
                continue
            }
        }
        if { [file exists ${d}] } {
            ui_info "post-deactivate: dir exists, deleting: ${d}"
            delete -force ${d}
        } else {
            ui_info "post-deactivate: dir doesn't exist, skipping delete: ${d}"
        }
    }
}

add_users               ${metabase_user} \
                        group=${metabase_group} \
                        home=${metabase_home_dir} \
                        shell=/bin/sh \
                        realname=metabase

startupitem.create      yes

# Enable additional logging, for diagnostic purposes
startupitem.logevents   yes

startupitem.user        ${metabase_user}
startupitem.group       ${metabase_group}

# Note: To avoid breakage when a Java port is updated/removed, use 'java_home' to select at runtime
#       java_home version filter not support wildcards
set java_version [regsub {[^0-9.]} ${java.version} ""]
startupitem.init "
export JAVA_HOME=\$(/usr/libexec/java_home --failfast --version ${java_version} 2>/dev/null || /usr/libexec/java_home)
export MB_PLUGINS_DIR=${metabase_exec_dir}/plugins
export MB_DB_FILE=${metabase_db_dir}/${name}
export MB_JETTY_HOST=${metabase_host}
export MB_JETTY_PORT=${metabase_port}
"

startupitem.start \
    "\${JAVA_HOME}/bin/java -jar ${metabase_exec}"

startupitem.stop \
    "kill \$(cat ${metabase_pid})"

startupitem.logfile \
    ${metabase_log}

startupitem.pidfile \
    manual ${metabase_pid}

notes-append "
To configure the metabase service, edit environment variables as follows:
  - Read document at https://www.metabase.com/docs/latest/configuring-metabase/environment-variables
  - \$ sudo vi ${metabase_wrapper}

Once the service is enabled, metabase will:
  - Listen by default on: http://${metabase_host}:${metabase_port}
  - Write logs to: ${metabase_log}
"

# Use GitHub releases for livecheck, filter out beta versions
# Open source version tags are like v0.57.7, enterprise is v1.x
livecheck.type      regex
livecheck.url       https://api.github.com/repos/metabase/metabase/releases?per_page=50
livecheck.regex     {"tag_name":\s*"v(0\.\d+\.\d+)"}
