#!/bin/bash

# BTM Koperasi - aaPanel Server Setup Script
# Run this script on your aaPanel VPS to prepare for deployment

set -e

echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "  BTM Koperasi - aaPanel Setup"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

# Configuration
APP_NAME="btm-koperasi"
APP_DIR="/www/wwwroot/btm-koperasi"
BACKUP_DIR="/www/wwwroot/btm-koperasi-backup"
DOMAIN="your-domain.com"
PHP_VERSION="8.3"

# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

echo -e "${GREEN}This script will configure your aaPanel server for BTM Koperasi deployment${NC}"
echo ""

# Check if running as root
if [ "$EUID" -ne 0 ]; then 
  echo -e "${RED}Please run as root (sudo)$${NC}"
  exit 1
fi

# 1. Create application directory
echo -e "${YELLOW}[1/8] Creating application directory...${NC}"
mkdir -p "$APP_DIR"
mkdir -p "$BACKUP_DIR"
chown -R www:www "$APP_DIR"
chown -R www:www "$BACKUP_DIR"
chmod -R 775 "$APP_DIR"
chmod -R 775 "$BACKUP_DIR"
echo -e "${GREEN}✓ Directory structure created${NC}"

# 2. Check PHP version
echo -e "${YELLOW}[2/8] Checking PHP installation...${NC}"
if command -v php &> /dev/null; then
    PHP_VER=$(php -v | head -n1)
    echo -e "${GREEN}✓ PHP installed: $PHP_VER${NC}"
else
    echo -e "${RED}✗ PHP not found! Please install PHP $PHP_VERSION via aaPanel${NC}"
    exit 1
fi

# 3. Install PHP extensions
echo -e "${YELLOW}[3/8] Checking PHP extensions...${NC}"
REQUIRED_EXTENSIONS=("mbstring" "xml" "curl" "mysql" "pdo" "sqlite3" "intl" "zip" "gd" "bcmath" "redis" "imagick")
MISSING_EXTENSIONS=()

for ext in "${REQUIRED_EXTENSIONS[@]}"; do
    if php -m | grep -qi "$ext"; then
        echo -e "${GREEN}  ✓ $ext${NC}"
    else
        echo -e "${RED}  ✗ $ext (missing)${NC}"
        MISSING_EXTENSIONS+=("$ext")
    fi
done

if [ ${#MISSING_EXTENSIONS[@]} -ne 0 ]; then
    echo -e "${YELLOW}Install missing extensions via aaPanel App Store:${NC}"
    echo "   PHP ${PHP_VERSION} -> Settings -> Install Extensions"
fi

# 4. Install Composer
echo -e "${YELLOW}[4/8] Checking Composer...${NC}"
if command -v composer &> /dev/null; then
    COMPOSER_VER=$(composer --version)
    echo -e "${GREEN}✓ $COMPOSER_VER${NC}"
else
    echo -e "${YELLOW}Installing Composer...${NC}"
    curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
    echo -e "${GREEN}✓ Composer installed${NC}"
fi

# 5. Install Node.js
echo -e "${YELLOW}[5/8] Checking Node.js...${NC}"
if command -v node &> /dev/null; then
    NODE_VER=$(node --version)
    echo -e "${GREEN}✓ Node.js $NODE_VER${NC}"
else
    echo -e "${YELLOW}Installing Node.js LTS...${NC}"
    curl -fsSL https://deb.nodesource.com/setup_lts.x | bash -
    apt-get install -y nodejs
    echo -e "${GREEN}✓ Node.js installed${NC}"
fi

# 6. Setup database
echo -e "${YELLOW}[6/8] Database setup...${NC}"
read -p "Enter MySQL database name: " DB_NAME
read -p "Enter MySQL username: " DB_USER
read -sp "Enter MySQL password: " DB_PASS
echo ""

mysql -u root << EOF
CREATE DATABASE IF NOT EXISTS \`$DB_NAME\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';
GRANT ALL PRIVILEGES ON \`$DB_NAME\`.* TO '$DB_USER'@'localhost';
FLUSH PRIVILEGES;
EOF
echo -e "${GREEN}✓ Database created: $DB_NAME${NC}"

# 7. Configure Supervisor (for queue workers)
echo -e "${YELLOW}[7/8] Configuring Supervisor...${NC}"
if command -v supervisorctl &> /dev/null; then
    cat > /etc/supervisor/conf.d/btm-koperasi-worker.conf << EOF
[program:btm-koperasi-worker]
process_name=%(program_name)s_%(process_num)02d
command=php $APP_DIR/artisan queue:work database --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www
numprocs=2
redirect_stderr=true
stdout_logfile=/www/wwwlogs/btm-koperasi-worker.log
stopwaitsecs=3600
EOF
    
    supervisorctl reread
    supervisorctl update
    echo -e "${GREEN}✓ Supervisor configured${NC}"
else
    echo -e "${YELLOW}Supervisor not installed. Install via aaPanel App Store${NC}"
fi

# 8. Setup cron jobs
echo -e "${YELLOW}[8/8] Configuring cron jobs...${NC}"
(crontab -l 2>/dev/null; echo "* * * * * cd $APP_DIR && php artisan schedule:run >> /dev/null 2>&1") | crontab -
echo -e "${GREEN}✓ Cron job added${NC}"

# Create .env file
echo ""
echo -e "${YELLOW}Creating .env file...${NC}"
cat > "$APP_DIR/.env" << EOF
APP_NAME="BTM Koperasi"
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=https://$DOMAIN

APP_LOCALE=en
APP_FALLBACK_LOCALE=en

LOG_CHANNEL=errorlog
LOG_LEVEL=error

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=$DB_NAME
DB_USERNAME=$DB_USER
DB_PASSWORD=$DB_PASS

SESSION_DRIVER=database
SESSION_LIFETIME=120
SESSION_ENCRYPT=false

CACHE_STORE=database
QUEUE_CONNECTION=database

MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_FROM_ADDRESS="noreply@$DOMAIN"
MAIL_FROM_NAME="\${APP_NAME}"
MAIL_ENCRYPTION=tls
EOF

chown www:www "$APP_DIR/.env"
chmod 644 "$APP_DIR/.env"
echo -e "${GREEN}✓ .env file created${NC}"

# Final setup
echo ""
echo -e "${YELLOW}Running final setup...${NC}"
cd "$APP_DIR"
sudo -u www composer install --no-dev --optimize-autoloader --no-interaction
sudo -u www php artisan key:generate
sudo -u www php artisan config:clear
sudo -u www php artisan migrate --force

# Set permissions
chown -R www:www "$APP_DIR"
chmod -R 775 "$APP_DIR/storage"
chmod -R 775 "$APP_DIR/bootstrap/cache"

echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo -e "${GREEN}  Setup Completed!${NC}"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "Next steps:"
echo "1. Configure your website in aaPanel"
echo "   - Domain: $DOMAIN"
echo "   - Root: $APP_DIR/public"
echo "   - PHP: $PHP_VERSION"
echo ""
echo "2. Setup SSL certificate (Let's Encrypt)"
echo ""
echo "3. Configure reverse proxy if needed"
echo ""
echo "4. Add GitHub deploy key:"
echo "   - Generate SSH key: ssh-keygen -t ed25519"
echo "   - Add public key to GitHub repository secrets (SSH_PRIVATE_KEY)"
echo ""
echo "5. Update GitHub secrets:"
echo "   - SSH_HOST: your_server_ip"
echo "   - SSH_USERNAME: root (or your user)"
echo "   - DB_PASSWORD: your_db_password"
echo "   - APP_URL: $DOMAIN"
echo ""
echo "6. Run first deployment from GitHub Actions"
echo ""
echo -e "${GREEN}Ready for deployment!${NC}"
