#!/bin/sh

set -eu

PERL=${PERL:-perl}
FATPACK=${FATPACK:-fatpack}

die() {
    msg="$1\n"
    shift
    # shellcheck disable=SC2059
    printf "${msg}" "$@" 1>&2
    exit 1
}

use=$(
    for mod in \
        parent \
        Exporter \
        HTTP::Parser \
        HTTP::Tiny \
        Plack::App::Proxy \
        Plack::App::Proxy::Backend::HTTP::Tiny \
        Plack::Builder \
        Plack::Handler::Starlight \
        Plack::Handler::Thrall \
        Plack::Middleware::AccessLog \
        Plack::Middleware::Proxy::Requests \
        Plack::Middleware::Proxy::Connect::IO \
        Plack::Middleware::TrafficLog \
        Time::Local; do
        echo "--use=${mod}"
    done
)

delete=$(
    for mod in \
        Clone \
        List::Util \
        Sub::Name \
        Time::TZOffset; do
        path=$(echo "${mod}" | sed 's,::,/,g')
        printf "%s" "next if m{^${path}\.pm$}; "
    done
)

# cpm install -g --reinstall if parent Exporter HTTP::Date HTTP::Status HTTP::Tiny IO::Socket::IP Module::Load Time::Local Try::Tiny

cd "$(dirname "$0")" || exit 0

rm -f fatpacker.trace packlists pureproxy
rm -rf fatlib

# shellcheck disable=SC2086
PLACK_HTTP_PARSER_PP=1 ${FATPACK} trace ${use} ../script/pureproxy.pl

${PERL} -ni -e "${delete}; print" fatpacker.trace

# shellcheck disable=SC2046
${FATPACK} packlists-for $(cat fatpacker.trace) >packlists

# shellcheck disable=SC2046
${FATPACK} tree $(cat packlists)

for mod in \
    if \
    parent \
    Clone::PP \
    Exporter \
    HTTP::Date \
    HTTP::Status \
    HTTP::Tiny \
    IO::Socket::IP \
    JSON::MaybeXS \
    Module::Load \
    Time::Local \
    Try::Tiny \
    URI \
    URI::Escape \
    WWW::Form::UrlEncoded \
    WWW::Form::UrlEncoded::PP \
    HTTP::Headers; do
    path=$(echo "${mod}" | sed 's,::,/,g')
    if [ ! -f "fatlib/${path}.pm" ]; then
        mkdir -p "fatlib/$(dirname "${path}")"
        cp -f "$(${PERL} -le "use ${mod} (); print \$INC{'${path}.pm'}")" "fatlib/${path}.pm" # "
        test -f "fatlib/${path}.pm" || die "Missing module at site_perl. Reinstall it with command:\ncpanm --reinstall %s" "${mod}"
    fi
done

eval "$(${PERL} -V:archname)"

rm -rf fatlib/auto/share
rm -rf "fatlib/${archname}"
find fatlib \( -name .keep -o -name '*.bundle' -o -name '*.ix' -o -name '*.pod' \) -print0 | xargs -0r rm -f

${FATPACK} file ../script/pureproxy.pl >pureproxy

${PERL} -pi -e 's{^#!.*/perl$}{#!/usr/bin/env perl}' pureproxy
${PERL} -MConfig -pi -e 's{$Config{archname}/}{}' pureproxy
${PERL} -MText::Unidecode=unidecode -CSD -0777 -pi -e 'unidecode $_' pureproxy
chmod +x pureproxy

${PERL} ./pureproxy -v