#!/bin/bash

# Quick environment setup for production servers
# This script is more direct and has fewer dependencies than setup-environment.php

# Define paths
BASE_PATH=$(dirname $(readlink -f "$0"))
ENV_PATH="$BASE_PATH/.env"
SAMPLE_ENV_PATHS=(
  "$BASE_PATH/storage/master_data/config_env.sample"
  "$BASE_PATH/.env.example"
  "$BASE_PATH/storage/app/config_env.sample"
  "$BASE_PATH/storage/config_env.sample"
)

# Extract arguments
APP_URL=""
DB_DATABASE=""
DB_USERNAME=""
DB_PASSWORD=""
APP_DEBUG=""
APP_ENV=""

for i in "$@"
do
case $i in
    --app_url=*)
    APP_URL="${i#*=}"
    shift
    ;;
    --db_database=*)
    DB_DATABASE="${i#*=}"
    shift
    ;;
    --db_username=*)
    DB_USERNAME="${i#*=}"
    shift
    ;;
    --db_password=*)
    DB_PASSWORD="${i#*=}"
    shift
    ;;
    --app_debug=*)
    APP_DEBUG="${i#*=}"
    shift
    ;;
    --app_env=*)
    APP_ENV="${i#*=}"
    shift
    ;;
    *)
          # unknown option
    ;;
esac
done

echo "WE CARE CLOUD - Environment Setup"
echo "--------------------------------"
echo ""
echo "Base path: $BASE_PATH"

# Check if .env already exists
if [ -f "$ENV_PATH" ]; then
    echo "Warning: .env file already exists at $ENV_PATH"
    echo "To create a new .env file, please rename or remove the existing one first."
    echo -n "Do you want to overwrite it? (y/N): "
    read -r response
    if [[ ! "$response" =~ ^[yY]$ ]]; then
        echo "Operation cancelled."
        exit 0
    fi
fi

# Find template file
TEMPLATE_PATH=""
for path in "${SAMPLE_ENV_PATHS[@]}"; do
    if [ -f "$path" ]; then
        TEMPLATE_PATH="$path"
        echo "Found environment template at: $TEMPLATE_PATH"
        break
    fi
done

if [ -z "$TEMPLATE_PATH" ]; then
    echo "Error: Could not find any environment template file."
    echo "Looked in these locations:"
    for path in "${SAMPLE_ENV_PATHS[@]}"; do
        echo "- $path"
    done
    exit 1
fi

# Read template file
echo "Reading template file..."
TEMPLATE_CONTENT=$(cat "$TEMPLATE_PATH")

# Create backup of existing .env
if [ -f "$ENV_PATH" ]; then
    BACKUP_PATH="$ENV_PATH.backup-$(date +%Y-%m-%d-%H%M%S)"
    cp "$ENV_PATH" "$BACKUP_PATH"
    echo "Created backup at: $BACKUP_PATH"
fi

# Process the template
echo "Processing environment variables..."

# Process APP_URL
if [ -n "$APP_URL" ]; then
    echo "Setting APP_URL to: $APP_URL"
    TEMPLATE_CONTENT=$(echo "$TEMPLATE_CONTENT" | sed -E "s|APP_URL=.*$|APP_URL=$APP_URL|g")
fi

# Process DB_DATABASE
if [ -n "$DB_DATABASE" ]; then
    echo "Setting DB_DATABASE to: $DB_DATABASE"
    TEMPLATE_CONTENT=$(echo "$TEMPLATE_CONTENT" | sed -E "s|DB_DATABASE=.*$|DB_DATABASE=$DB_DATABASE|g")
fi

# Process DB_USERNAME
if [ -n "$DB_USERNAME" ]; then
    echo "Setting DB_USERNAME to: $DB_USERNAME"
    TEMPLATE_CONTENT=$(echo "$TEMPLATE_CONTENT" | sed -E "s|DB_USERNAME=.*$|DB_USERNAME=$DB_USERNAME|g")
fi

# Process DB_PASSWORD
if [ -n "$DB_PASSWORD" ]; then
    echo "Setting DB_PASSWORD to: $DB_PASSWORD"
    TEMPLATE_CONTENT=$(echo "$TEMPLATE_CONTENT" | sed -E "s|DB_PASSWORD=.*$|DB_PASSWORD=$DB_PASSWORD|g")
fi

# Process APP_DEBUG
if [ -n "$APP_DEBUG" ]; then
    echo "Setting APP_DEBUG to: $APP_DEBUG"
    TEMPLATE_CONTENT=$(echo "$TEMPLATE_CONTENT" | sed -E "s|APP_DEBUG=.*$|APP_DEBUG=$APP_DEBUG|g")
fi

# Process APP_ENV
if [ -n "$APP_ENV" ]; then
    echo "Setting APP_ENV to: $APP_ENV"
    TEMPLATE_CONTENT=$(echo "$TEMPLATE_CONTENT" | sed -E "s|APP_ENV=.*$|APP_ENV=$APP_ENV|g")
fi

# Write to .env file
echo "$TEMPLATE_CONTENT" > "$ENV_PATH"

if [ $? -eq 0 ]; then
    echo ""
    echo "Success! Environment file created at: $ENV_PATH"
else
    echo ""
    echo "Error: Failed to create environment file. Check permissions."
    exit 1
fi

# Copy .htaccess files
ROOT_HTACCESS_SAMPLE="$BASE_PATH/storage/master_data/htaccess.sample"
PUBLIC_HTACCESS_SAMPLE="$BASE_PATH/storage/master_data/public_htaccess.sample"
ROOT_HTACCESS="$BASE_PATH/.htaccess"
PUBLIC_HTACCESS="$BASE_PATH/public/.htaccess"

# Copy root .htaccess file
if [ -f "$ROOT_HTACCESS_SAMPLE" ]; then
    if [ -f "$ROOT_HTACCESS" ]; then
        echo "Root .htaccess file already exists at $ROOT_HTACCESS"
        echo -n "Do you want to overwrite it? (y/N): "
        read -r response
        if [[ "$response" =~ ^[yY]$ ]]; then
            echo "Copying root .htaccess file..."
            cp "$ROOT_HTACCESS_SAMPLE" "$ROOT_HTACCESS"
            if [ $? -eq 0 ]; then
                echo "Success! Root .htaccess file updated at: $ROOT_HTACCESS"
            else
                echo "Error: Failed to update root .htaccess file. Check permissions."
            fi
        else
            echo "Skipping root .htaccess file."
        fi
    else
        echo "Copying root .htaccess file..."
        cp "$ROOT_HTACCESS_SAMPLE" "$ROOT_HTACCESS"
        if [ $? -eq 0 ]; then
            echo "Success! Root .htaccess file created at: $ROOT_HTACCESS"
        else
            echo "Error: Failed to create root .htaccess file. Check permissions."
        fi
    fi
else
    echo "Warning: Root .htaccess sample not found at $ROOT_HTACCESS_SAMPLE"
fi

# Copy public .htaccess file
if [ -f "$PUBLIC_HTACCESS_SAMPLE" ]; then
    if [ -f "$PUBLIC_HTACCESS" ]; then
        echo "Public .htaccess file already exists at $PUBLIC_HTACCESS"
        echo -n "Do you want to overwrite it? (y/N): "
        read -r response
        if [[ "$response" =~ ^[yY]$ ]]; then
            echo "Copying public .htaccess file..."
            cp "$PUBLIC_HTACCESS_SAMPLE" "$PUBLIC_HTACCESS"
            if [ $? -eq 0 ]; then
                echo "Success! Public .htaccess file updated at: $PUBLIC_HTACCESS"
            else
                echo "Error: Failed to update public .htaccess file. Check permissions."
            fi
        else
            echo "Skipping public .htaccess file."
        fi
    else
        echo "Copying public .htaccess file..."
        cp "$PUBLIC_HTACCESS_SAMPLE" "$PUBLIC_HTACCESS"
        if [ $? -eq 0 ]; then
            echo "Success! Public .htaccess file created at: $PUBLIC_HTACCESS"
        else
            echo "Error: Failed to create public .htaccess file. Check permissions."
        fi
    fi
else
    echo "Warning: Public .htaccess sample not found at $PUBLIC_HTACCESS_SAMPLE"
fi

echo "Environment setup complete!"
