#!/bin/bash

# Start SQL Server
/opt/mssql/bin/sqlservr &

# Wait for SQL Server to start
echo "Waiting for SQL Server to start..."
sleep 30s

# Initialize database
for i in {1..50};
do
    sqlcmd -S localhost -U sa -P $SA_PASSWORD -Q "SELECT 1" &> /dev/null
    if [ $? -eq 0 ]
    then
        echo "SQL Server is ready"
        break
    else
        echo "SQL Server is not ready yet..."
        sleep 1
    fi
done

# Check if we should drop the database
if [ "${DROP_DATABASE,,}" = "true" ]; then
    echo "DROP_DATABASE is true. Attempting to drop database..."
    sqlcmd -S localhost -U sa -P $SA_PASSWORD -Q "
    IF EXISTS (SELECT 1 FROM sys.databases WHERE name = 'st-database')
    BEGIN
        ALTER DATABASE [st-database] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
        DROP DATABASE [st-database];
    END"
    if [ $? -eq 0 ]; then
        echo "Database dropped successfully."
    else
        echo "Error dropping database"
        exit 1
    fi
fi

# Check if database already exists and has tables
echo "Checking if database is already initialized..."
DB_INITIALIZED=$(sqlcmd -S localhost -U sa -P $SA_PASSWORD -Q "
IF EXISTS (
    SELECT 1 
    FROM sys.databases 
    WHERE name = 'st-database'
    AND EXISTS (
        SELECT 1 
        FROM st-database.sys.tables 
        WHERE name = 'AMAssumptionView'
    )
) 
SELECT 1 
ELSE 
SELECT 0" -h -1)

if [ "$DB_INITIALIZED" = "1" ]; then
    echo "Database st-database already exists and is initialized. Skipping setup."
else
    echo "Database needs initialization. Starting setup..."
    
    # Create st-database if it doesn't exist
    echo "Creating st-database if it doesn't exist..."
    sqlcmd -S localhost -U sa -P $SA_PASSWORD -Q "IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = 'st-database') CREATE DATABASE [st-database]"
    if [ $? -ne 0 ]; then
        echo "Error creating database"
        exit 1
    fi

    # Run the initialization script
    echo "Running initialization script..."
    sqlcmd -S localhost -U sa -P $SA_PASSWORD -d st-database -i /usr/src/app/init.sql
    if [ $? -ne 0 ]; then
        echo "Error executing initialization script"
        exit 1
    fi

    # Run all schema scripts in the schemas directory
    echo "Running schema scripts..."
    for f in /usr/src/app/schemas/*.sql
    do
        echo "Processing $f..."
        
        # Create a temporary file
        temp_file=$(mktemp)
        
        # Process the file: add newlines around GO statements
        sed 's/GO/\nGO\n/g' "$f" > "$temp_file"
        
        # Execute the processed file
        sqlcmd -S localhost -U sa -P $SA_PASSWORD -d st-database -i "$temp_file"
        if [ $? -ne 0 ]; then
            echo "Warning: Script $f had some errors but continuing..."
            rm "$temp_file"  # Clean up temp file
            continue
        fi
        
        # Clean up temp file
        rm "$temp_file"
    done

    echo "All scripts executed. SQL Server is ready."
fi

# Keep container running
while true; do
    sleep 1
done