#!/usr/bin/env bash
set -aeuo pipefail

# create the dotenv file if it doesn't exist
if [ ! -f .env ]; then
    cp .env.default .env
    chmod 600 .env
    echo "Created boilerplate .env file at:"
    echo ""
    echo "    $(pwd)/.env"
    echo ""
    echo "You need to modify the .env file NOW, then re-run the start script." 
    exit 0
fi

source .env.default
source .env

if [ ! -v 'COMPOSE_PROJECT_NAME' ]; then
    COMPOSE_PROJECT_NAME="${PROJECT}_${ENVIRONMENT}"
    echo "COMPOSE_PROJECT_NAME=$COMPOSE_PROJECT_NAME" >> .env
fi

COMPOSE_PROJECT_NAME="${PROJECT}_${ENVIRONMENT}"
APP_CONTAINER=${COMPOSE_PROJECT_NAME}_app
DB_CONTAINER=${COMPOSE_PROJECT_NAME}_db

################################################################################

./generate-docker-compose

docker-compose up -d

docker exec -u root $DB_CONTAINER bash -c "chown -R mysql: /var/log/mysql"

echo "Waiting for MySQL server to start accepting queries..."
while [ 0 ]; do
    cmd="mysql -u root -p${DB_PASSWORD} -e 'SELECT \"READY\"' 2> /dev/null"
    result=$(docker exec $DB_CONTAINER bash -c "$cmd" || true)
    sleep 1

    if [[ "$result" =~ "READY" ]]; then
        break
    fi
done

src=/var/www/html

docker exec -u root $APP_CONTAINER bash -c "chown root:www-data $src"

read_only="
    app
    artisan
    bootstrap
    config
    database
    public
    resources
    routes
    vendor
"

for relpath in $read_only; do
    docker exec -u root $APP_CONTAINER bash -c "chown -R root:www-data $src/$relpath"
done

read_write="
    bootstrap/cache
    storage/app/public
    storage/framework/cache
    storage/framework/sessions
    storage/framework/views 
    storage/logs
"

for relpath in $read_write; do
    docker exec -u root $APP_CONTAINER bash -c "mkdir -p $relpath"
done

docker exec -u root $APP_CONTAINER bash -c "chown www-data:www-data $src/bootstrap/cache"
docker exec -u www-data $APP_CONTAINER bash -c "touch $src/storage/logs/laravel.log"
docker exec -u www-data $APP_CONTAINER bash -c "php artisan migrate"
docker exec -u www-data $APP_CONTAINER bash -c "php artisan db:seed"

