#!/bin/bash

##
## sudo ./setup.sh
## or
## sudo MYSQL_ROOT_PASSWORD=rootpassword MYSQL_DATABASE=custom_db ./setup.sh
##

set -e

# スクリプトを root 権限で実行しているか確認
if [ "$EUID" -ne 0 ]; then
    echo "Please run this script as root or with sudo"
    exit 1
fi

echo "Starting server setup..."

# 環境変数の設定
MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-"rootpassword"}
MYSQL_DATABASE=${MYSQL_DATABASE:-"laravel"}
MYSQL_USER=${MYSQL_USER:-"laravel"}
MYSQL_PASSWORD=${MYSQL_PASSWORD:-"password"}

# システムのタイムゾーン設定
timedatectl set-timezone Asia/Tokyo

# システムアップデート
apt-get update

# 基本パッケージのインストール
apt-get install -y \
    iputils-ping \
    net-tools \
    software-properties-common \
    curl \
    git \
    unzip \
    ssl-cert

# PHP 8.3のリポジトリ追加とインストール
add-apt-repository ppa:ondrej/php -y
apt-get update
apt-get install -y \
    apache2 \
    libapache2-mod-php8.3 \
    php8.3 \
    php8.3-cli \
    php8.3-common \
    php8.3-curl \
    php8.3-bcmath \
    php8.3-mbstring \
    php8.3-mysql \
    php8.3-xml

# MySQL 8.3のインストール（MySQLの公式リポジトリから）
curl -sSL https://dev.mysql.com/get/mysql-apt-config_0.8.26-1_all.deb -o mysql-apt-config.deb
DEBIAN_FRONTEND=noninteractive dpkg -i mysql-apt-config.deb
apt-get update
apt-get install -y mysql-server

# Apache設定
a2enmod rewrite ssl

# SSL設定ファイルの作成
cat > /etc/apache2/sites-available/default-ssl.conf << 'EOL'
<VirtualHost *:443>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/public

    SSLEngine on
    SSLCertificateFile    /etc/ssl/certs/server.crt
    SSLCertificateKeyFile /etc/ssl/private/server.key

    <Directory /var/www/html/public>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/ssl_error.log
    CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
</VirtualHost>
EOL

# 開発環境用の自己署名証明書作成
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    -keyout /etc/ssl/private/server.key \
    -out /etc/ssl/certs/server.crt \
    -subj "/C=JP/ST=Tokyo/L=Tokyo/O=Development/CN=localhost"

# Composerインストール
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# プロジェクトのクローン
rm -rf /var/www/html
git clone -b main git@bitbucket.org:hubasei/cmsdb_2025.git /var/www/html

# 環境設定ファイルの準備
cd /var/www/html
cp .env.example .env

# MySQLの初期設定
mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '${MYSQL_ROOT_PASSWORD}';"
mysql -u root -p${MYSQL_ROOT_PASSWORD} << EOF
CREATE DATABASE IF NOT EXISTS ${MYSQL_DATABASE};
CREATE USER IF NOT EXISTS '${MYSQL_USER}'@'localhost' IDENTIFIED WITH mysql_native_password BY '${MYSQL_PASSWORD}';
GRANT ALL PRIVILEGES ON ${MYSQL_DATABASE}.* TO '${MYSQL_USER}'@'localhost';
FLUSH PRIVILEGES;
EOF

# MySQLの外部接続設定
sed -i 's/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf

# 所有者の変更と権限設定
chown -R www-data:www-data /var/www/html
find /var/www/html -type f -exec chmod 644 {} \;
find /var/www/html -type d -exec chmod 755 {} \;

# Apache設定の反映
a2ensite default-ssl
systemctl restart apache2
systemctl restart mysql

echo "Installation completed successfully!"
echo "MySQL root password: ${MYSQL_ROOT_PASSWORD}"
echo "Database name: ${MYSQL_DATABASE}"
echo "Database user: ${MYSQL_USER}"
echo "Database password: ${MYSQL_PASSWORD}"