@servers(['vps1' => 'rann-deployer@vps1.sl-projects.com'])

@setup
$repository = 'ssh://git@gitlab.sl-projects.com:2222/SofianeLasri/rann-graphic-design-website.git';
$releases_dir = '/home/serveur-web/rann-graphic-design.fr/releases';
$app_dir = '/home/serveur-web/rann-graphic-design.fr';
$release = date('YmdHis');
$new_release_dir = $releases_dir .'/'. $release;
@endsetup

@story('deploy')
clone_repository
run_composer
run_npm
update_symlinks
migration
clean_old_releases
@endstory

@task('clone_repository')
echo 'Cloning repository'
[ -d {{ $releases_dir }} ] || mkdir {{ $releases_dir }}
git clone --depth 1 {{ $repository }} {{ $new_release_dir }}
cd {{ $new_release_dir }}
git reset --hard {{ $commit }}
@endtask

@task('run_composer')
echo "Starting deployment ({{ $release }})"
cd {{ $new_release_dir }}
composer install --no-scripts -o
@endtask

@task('run_npm')
echo "Running npm install"
cd {{ $new_release_dir }}
npm install
echo "Building Vite"
npm run build
@endtask

@task('update_symlinks')
echo "Checking if storage directory exists"
if [ ! -d {{ $app_dir }}/storage ]; then
    echo "Creating storage directory"
    mkdir -p {{ $app_dir }}/storage
    mkdir -p {{ $app_dir }}/storage/app
    mkdir -p {{ $app_dir }}/storage/framework
    mkdir -p {{ $app_dir }}/storage/framework/cache
    mkdir -p {{ $app_dir }}/storage/framework/sessions
    mkdir -p {{ $app_dir }}/storage/framework/views
    mkdir -p {{ $app_dir }}/storage/logs
fi

echo "Linking storage directory"
rm -rf {{ $new_release_dir }}/storage
ln -nfs {{ $app_dir }}/storage {{ $new_release_dir }}/storage

echo "Checking if bootstrap/cache directory exists"
if [ ! -d {{ $app_dir }}/bootstrap/cache ]; then
    echo "Creating bootstrap/cache directory"
    mkdir -p {{ $app_dir }}/bootstrap/cache
fi

echo "Linking bootstrap/cache directory"
rm -rf {{ $new_release_dir }}/bootstrap/cache
ln -nfs {{ $app_dir }}/bootstrap/cache {{ $new_release_dir }}/bootstrap/cache

echo 'Checking if .env file exists'
if [ ! -f {{ $app_dir }}/.env ]; then
    echo 'Creating .env file'
    cp {{ $new_release_dir }}/.env.example {{ $app_dir }}/.env
fi

echo 'Linking .env file'
ln -nfs {{ $app_dir }}/.env {{ $new_release_dir }}/.env

echo 'Linking current release'
ln -nfs {{ $new_release_dir }} {{ $app_dir }}/current
@endtask

@task('migration')
cd {{ $new_release_dir }}
php artisan down
echo "Migrating the database"
php artisan migrate --force
echo "Clearing cache"
php artisan optimize:clear
php artisan storage:link
php artisan up
php artisan queue:restart
@endtask

@task('clean_old_releases')
echo "Cleaning old releases"

cd {{ $releases_dir }}

releases=($(ls -dt */))

total_releases=${#releases[@]}

if [ $total_releases -gt 3 ]; then
echo "Total releases: $total_releases. Deleting old releases..."
for ((i=3; i<$total_releases; i++)); do
echo "Deletion of : ${releases[$i]}"
rm -rf "${releases[$i]}"
done
else
echo "No old releases to delete"
fi
@endtask