#!/bin/bash
#
# M1 ERP Deployment Script
# Safely deploy to production server
#

set -e  # Exit on error

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

# Configuration (load from .env.production or environment)
PROD_SERVER="${PROD_SERVER_HOST:-merph.mavrixone}"
PROD_USER="${PROD_SERVER_USER:-mavrixone}"
PROD_PATH="${PROD_SERVER_PATH:-/var/www/html}"
BACKUP_DIR="/var/backups/m1_erp"

echo -e "${BLUE}================================${NC}"
echo -e "${BLUE}  M1 ERP Deployment Script${NC}"
echo -e "${BLUE}================================${NC}\n"

# Pre-deployment checks
echo -e "${YELLOW}Running pre-deployment checks...${NC}"

# 1. Check if on main branch
CURRENT_BRANCH=$(git branch --show-current)
if [ "$CURRENT_BRANCH" != "main" ]; then
    echo -e "${RED}✗ Not on main branch (currently on: $CURRENT_BRANCH)${NC}"
    echo "Deploy only from 'main' branch"
    exit 1
fi
echo -e "${GREEN}✓ On main branch${NC}"

# 2. Check for uncommitted changes
if ! git diff-index --quiet HEAD --; then
    echo -e "${RED}✗ Uncommitted changes detected${NC}"
    echo "Commit or stash changes before deploying"
    exit 1
fi
echo -e "${GREEN}✓ No uncommitted changes${NC}"

# 3. Run tests
echo -e "${YELLOW}Running tests...${NC}"
if ! composer test:unit; then
    echo -e "${RED}✗ Tests failed${NC}"
    exit 1
fi
echo -e "${GREEN}✓ Tests passed${NC}"

# 4. Run quality checks
echo -e "${YELLOW}Running quality checks...${NC}"
if ! composer phpstan; then
    echo -e "${RED}✗ PHPStan found errors${NC}"
    exit 1
fi
echo -e "${GREEN}✓ Quality checks passed${NC}"

# Deployment confirmation
echo ""
echo -e "${YELLOW}Ready to deploy to: ${PROD_USER}@${PROD_SERVER}:${PROD_PATH}${NC}"
read -p "Continue with deployment? (yes/no): " CONFIRM

if [ "$CONFIRM" != "yes" ]; then
    echo -e "${RED}Deployment cancelled${NC}"
    exit 0
fi

# Create backup on production
echo -e "${YELLOW}Creating backup on production...${NC}"
ssh "${PROD_USER}@${PROD_SERVER}" "mkdir -p ${BACKUP_DIR} && \
    tar -czf ${BACKUP_DIR}/backup_\$(date +%Y%m%d_%H%M%S).tar.gz -C ${PROD_PATH} ."
echo -e "${GREEN}✓ Backup created${NC}"

# Deploy files via rsync
echo -e "${YELLOW}Deploying files...${NC}"
rsync -avz --delete \
    --exclude='.git' \
    --exclude='.env.development' \
    --exclude='node_modules' \
    --exclude='tests' \
    --exclude='coverage' \
    --exclude='metrics' \
    --exclude='.phpunit.cache' \
    --exclude='vendor' \
    --exclude='uploads/*' \
    --exclude='debug/*' \
    ./ "${PROD_USER}@${PROD_SERVER}:${PROD_PATH}/"
echo -e "${GREEN}✓ Files deployed${NC}"

# Install production dependencies
echo -e "${YELLOW}Installing production dependencies...${NC}"
ssh "${PROD_USER}@${PROD_SERVER}" "cd ${PROD_PATH} && \
    composer install --no-dev --optimize-autoloader --no-interaction"
echo -e "${GREEN}✓ Dependencies installed${NC}"

# Run migrations (if needed)
echo -e "${YELLOW}Running database migrations...${NC}"
ssh "${PROD_USER}@${PROD_SERVER}" "cd ${PROD_PATH} && \
    php scripts/run_migrations.php"
echo -e "${GREEN}✓ Migrations complete${NC}"

# Clear caches
echo -e "${YELLOW}Clearing caches...${NC}"
ssh "${PROD_USER}@${PROD_SERVER}" "cd ${PROD_PATH} && \
    rm -rf cache/* .phpunit.cache"
echo -e "${GREEN}✓ Caches cleared${NC}"

# Set proper permissions
echo -e "${YELLOW}Setting permissions...${NC}"
ssh "${PROD_USER}@${PROD_SERVER}" "cd ${PROD_PATH} && \
    chmod -R 755 . && \
    chmod -R 777 uploads debug"
echo -e "${GREEN}✓ Permissions set${NC}"

# Deployment complete
echo ""
echo -e "${GREEN}================================${NC}"
echo -e "${GREEN}  Deployment Complete! 🎉${NC}"
echo -e "${GREEN}================================${NC}"
echo ""
echo -e "Deployed branch: ${BLUE}${CURRENT_BRANCH}${NC}"
echo -e "Commit: ${BLUE}$(git rev-parse --short HEAD)${NC}"
echo -e "Time: ${BLUE}$(date)${NC}"
echo ""
echo -e "${YELLOW}Next steps:${NC}"
echo -e "1. Test the production site: ${PROD_SERVER}"
echo -e "2. Monitor error logs"
echo -e "3. Verify database migrations applied correctly"
echo ""
