#!/bin/bash
# ============================================================
# SEGUNOR V2 — Setup do CT Proxmox (Debian 13 / Trixie)
# ============================================================
#
# PASSO 1: No Proxmox, criar CT com Debian 13 (Trixie)
#   - Template: debian-13-standard
#   - RAM: 2GB+ (recomendado 4GB)
#   - Disco: 8GB+
#   - Rede: Bridge com IP estático na mesma rede (ex: 192.168.69.30)
#   - Nesting: Ativado (se necessário para mounts)
#
# PASSO 2: Entrar no CT e correr estes comandos:
# ============================================================

# --- ATUALIZAR SISTEMA ---
apt update && apt upgrade -y

# --- INSTALAR PHP 8.4 + EXTENSÕES ---
# Debian 13 (Trixie) já traz PHP 8.4 nos repos oficiais
apt install -y \
    php8.4 \
    php8.4-cli \
    php8.4-common \
    php8.4-mysql \
    php8.4-mbstring \
    php8.4-xml \
    php8.4-curl \
    php8.4-zip \
    php8.4-bcmath \
    php8.4-gd \
    php8.4-intl \
    php8.4-readline \
    php8.4-opcache \
    php8.4-sqlite3 \
    php8.4-tokenizer \
    libapache2-mod-php8.4

# --- INSTALAR APACHE ---
apt install -y apache2
a2enmod rewrite
a2enmod php8.4

# --- INSTALAR UTILITÁRIOS ---
apt install -y \
    git \
    unzip \
    curl \
    wget \
    cifs-utils \
    nfs-common

# --- INSTALAR COMPOSER ---
cd /tmp
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
chmod +x /usr/local/bin/composer

# Verificar
composer --version

# --- INSTALAR NODE.JS 22 LTS + NPM ---
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt install -y nodejs

# Verificar
node --version
npm --version

# --- CRIAR DIRETÓRIO DO PROJETO ---
mkdir -p /var/www/v2

# --- CONFIGURAR APACHE VIRTUALHOST ---
cat > /etc/apache2/sites-available/segunor-v2.conf << 'VHOST'
<VirtualHost *:80>
    ServerName segunor.local
    DocumentRoot /var/www/v2/public

    <Directory /var/www/v2/public>
        AllowOverride All
        Require all granted
        Options -Indexes +FollowSymLinks
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/segunor-v2-error.log
    CustomLog ${APACHE_LOG_DIR}/segunor-v2-access.log combined
</VirtualHost>
VHOST

# Ativar site e desativar default
a2dissite 000-default.conf
a2ensite segunor-v2.conf
systemctl restart apache2

# --- CONFIGURAR PHP.INI (ajustes para produção) ---
PHP_INI="/etc/php/8.4/apache2/php.ini"
sed -i 's/upload_max_filesize = .*/upload_max_filesize = 64M/' $PHP_INI
sed -i 's/post_max_size = .*/post_max_size = 64M/' $PHP_INI
sed -i 's/memory_limit = .*/memory_limit = 256M/' $PHP_INI
sed -i 's/max_execution_time = .*/max_execution_time = 120/' $PHP_INI
sed -i 's/;date.timezone =.*/date.timezone = Europe\/Lisbon/' $PHP_INI

systemctl restart apache2

# ============================================================
# PASSO 3: MONTAR NAS (ajustar IPs/caminhos conforme o teu NAS)
# ============================================================

# Criar pontos de montagem
mkdir -p /mnt/nas_processos
mkdir -p /mnt/nas_orcamentos

# --- OPÇÃO A: Se NAS usa SMB/CIFS ---
# Criar ficheiro de credenciais (mais seguro que inline)
cat > /root/.nas_credentials << 'CRED'
username=SEU_USER_NAS
password=SUA_PASSWORD_NAS
CRED
chmod 600 /root/.nas_credentials

# Adicionar ao /etc/fstab para montar automaticamente ao boot
# AJUSTAR: IP do NAS e caminhos dos shares
cat >> /etc/fstab << 'FSTAB'
//192.168.69.XX/processos  /mnt/nas_processos  cifs  credentials=/root/.nas_credentials,uid=www-data,gid=www-data,iocharset=utf8,vers=3.0  0  0
//192.168.69.XX/orcamentos /mnt/nas_orcamentos cifs  credentials=/root/.nas_credentials,uid=www-data,gid=www-data,iocharset=utf8,vers=3.0  0  0
FSTAB

# Montar agora
mount -a

# --- OPÇÃO B: Se NAS usa NFS ---
# cat >> /etc/fstab << 'FSTAB'
# 192.168.69.XX:/volume1/processos  /mnt/nas_processos  nfs  defaults  0  0
# 192.168.69.XX:/volume1/orcamentos /mnt/nas_orcamentos nfs  defaults  0  0
# FSTAB
# mount -a

# ============================================================
# PASSO 4: CONFIGURAR ACESSO REMOTO À BD MariaDB
# ============================================================
#
# No SERVIDOR DA BD (192.168.69.20), correr:
#
#   mysql -u root -p
#   CREATE USER 'segunor_v2'@'192.168.69.XX' IDENTIFIED BY 'PASSWORD_FORTE_AQUI';
#   GRANT ALL PRIVILEGES ON segunor.* TO 'segunor_v2'@'192.168.69.XX';
#   FLUSH PRIVILEGES;
#
# Também verificar que o MariaDB aceita conexões remotas:
#   - Editar /etc/mysql/mariadb.conf.d/50-server.cnf
#   - Mudar bind-address de 127.0.0.1 para 0.0.0.0 (ou IP específico)
#   - systemctl restart mariadb
#
# ============================================================

# --- TESTAR CONEXÃO À BD (a partir do novo CT) ---
apt install -y mariadb-client
mysql -h 192.168.69.20 -u segunor_v2 -p segunor -e "SELECT COUNT(*) FROM processo;"

# ============================================================
# PASSO 5: CRIAR PROJETO LARAVEL
# ============================================================

cd /var/www
composer create-project laravel/laravel v2

# Permissões
chown -R www-data:www-data /var/www/v2
chmod -R 775 /var/www/v2/storage
chmod -R 775 /var/www/v2/bootstrap/cache

# ============================================================
# PASSO 6: CONFIGURAR .env
# ============================================================

cat > /var/www/v2/.env << 'ENV'
APP_NAME="Segunor"
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://192.168.69.XX

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=192.168.69.20
DB_PORT=3306
DB_DATABASE=segunor
DB_USERNAME=segunor_v2
DB_PASSWORD=PASSWORD_FORTE_AQUI

SESSION_DRIVER=file
CACHE_STORE=file
QUEUE_CONNECTION=sync

NAS_PROCESSOS_PATH=/mnt/nas_processos
NAS_ORCAMENTOS_PATH=/mnt/nas_orcamentos
ENV

cd /var/www/v2
php artisan key:generate

# ============================================================
# PASSO 7: INSTALAR PACKAGES DO PROJETO
# ============================================================

cd /var/www/v2

# Estrutura modular
composer require nwidart/laravel-modules

# Permissões granulares
composer require spatie/laravel-permission

# Auditoria automática (logs de alterações)
composer require spatie/laravel-activitylog

# DataTables server-side
composer require yajra/laravel-datatables-oracle

# Debug (só desenvolvimento)
composer require barryvdh/laravel-debugbar --dev

# Publicar configs
php artisan vendor:publish --provider="Nwidart\Modules\LaravelModulesServiceProvider"
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="activitylog-migrations"

# ============================================================
# PASSO 8: MIGRAR SÓ AS TABELAS DOS PACKAGES (NÃO TOCA NAS EXISTENTES)
# ============================================================

# Isto cria APENAS as tabelas do Spatie (roles, permissions, activity_log)
# NÃO altera nenhuma tabela existente da BD segunor
php artisan migrate

# ============================================================
# PASSO 9: VERIFICAÇÕES FINAIS
# ============================================================

cd /var/www/v2

# Verificar que o Laravel arranca
php artisan about

# Testar conexão à BD
php artisan tinker --execute="echo DB::connection()->getDatabaseName();"

# Verificar PHP
php -v
php -m | grep -E "mysql|mbstring|xml|curl|zip|bcmath|gd|intl"

# Verificar NAS
ls -la /mnt/nas_processos/
ls -la /mnt/nas_orcamentos/

# Abrir no browser: http://192.168.69.XX
# Deves ver a página default do Laravel

echo ""
echo "============================================"
echo " SETUP COMPLETO!"
echo " Laravel v2 pronto em: http://192.168.69.XX"
echo " BD: segunor @ 192.168.69.20"
echo " NAS: /mnt/nas_processos + /mnt/nas_orcamentos"
echo "============================================"
echo ""
echo "Próximo passo: gerar os módulos com"
echo "  php artisan module:make Core"
echo "  php artisan module:make Dashboard"
echo "  php artisan module:make HR"
echo "  ... etc"
