#!/bin/bash

# Exit on error
set -e

# Debug information
echo "Current directory: $(pwd)"
echo "Script location: $0"

# Usage: ./configure.sh -f -t -sh

FIREBASE=false
TAILWIND=false
SHADCN=false

while [[ $# -gt 0 ]]; do
  case $1 in
    -f|--firebase)
      FIREBASE=true
      shift
      ;;
    -t|--tailwind)
      TAILWIND=true
      shift
      ;;
    -sh|--shadcn)
      SHADCN=true
      shift
      ;;
    *)
      echo "Unknown option $1"
      exit 1
      ;;
  esac
done

echo "Ensuring Nuxt directories exist..."
mkdir -p composables stores pages components layouts middleware assets/css

# Firebase
if $FIREBASE; then
  echo "Installing Firebase..."
  npm install firebase || {
    echo "Failed to install Firebase"
    exit 1
  }
  echo "// Firebase setup goes here" > composables/useFirebase.ts
fi

# Tailwind CSS
if $TAILWIND; then
  echo "Installing Tailwind CSS..."
  # Install Tailwind CSS and its peer dependencies
  npm install -D tailwindcss @tailwindcss/vite || {
    echo "Failed to install Tailwind CSS dependencies"
    exit 1
  }

  # Wait a moment for npm to finish installing
  sleep 2

  # Create main.css file
  echo "Creating main CSS file..."
  mkdir -p assets/css
  echo '@import "tailwindcss";' > assets/css/main.css

  # Update nuxt.config.ts
  echo "Updating Nuxt configuration..."
  if [ -f "nuxt.config.ts" ]; then
    # Create a temporary file
    tmp_file=$(mktemp)
    
    # First, add the import at the top if it doesn't exist
    awk '
    BEGIN { 
      import_added = 0;
      in_config = 0;
      found_vite = 0;
      found_css = 0;
    }
    # Add import at the top
    !import_added && /^[^#]/ {
      print "import tailwindcss from \"@tailwindcss/vite\";";
      import_added = 1;
    }
    # Handle the rest of the file
    {
      if ($0 ~ /export default defineNuxtConfig/) {
        in_config = 1;
      }
      
      # Handle Vite configuration
      if (in_config && /vite:/) {
        if ($0 ~ /{/) {
          print $0;
          if ($0 !~ /plugins/) {
            print "    plugins: [";
            print "      tailwindcss(),";
            print "    ],";
          } else if ($0 !~ /tailwindcss/) {
            sub(/\[/, "[tailwindcss(), ");
          }
          found_vite = 1;
          next;
        }
      }
      
      # Handle CSS configuration
      if (in_config && /css:/) {
        if ($0 ~ /\[/) {
          if ($0 !~ /main\.css/) {
            sub(/\[/, "[ \"~/assets/css/main.css\", ");
          }
          found_css = 1;
        }
      }
      
      # Add missing configurations
      if (in_config && !found_vite && $0 ~ /{/) {
        print $0;
        print "  vite: {";
        print "    plugins: [";
        print "      tailwindcss(),";
        print "    ],";
        print "    },";
        found_vite = 1;
        next;
      }
      
      if (in_config && !found_css && $0 ~ /{/) {
        print $0;
        print ",  css: [\"~/assets/css/main.css\"],";
        found_css = 1;
        next;
      }
      
      # Ensure comma after CSS if there are more configurations
      if (in_config && found_css && $0 ~ /^[[:space:]]*[a-zA-Z]/ && $0 !~ /,$/) {
        sub(/^[[:space:]]*/, "  ");
        print ",";
      }
      
      print;
    }
    ' nuxt.config.ts > "$tmp_file"
    
    # Replace the original file
    mv "$tmp_file" nuxt.config.ts
  else
    echo "Error: nuxt.config.ts not found. Please ensure you are in a Nuxt project directory."
    exit 1
  fi

  echo "Tailwind CSS ready"
fi

# ShadCN-Vue
if $SHADCN; then
  echo "Installing shadcn-vue for Nuxt..."
  # Install shadcn-vue globally first
  npm install -g shadcn-vue || {
    echo "Failed to install shadcn-vue globally"
    exit 1
  }
  
  # Wait a moment for npm to finish installing
  sleep 2

  # Now run the init command
  shadcn-vue init || {
    echo "Failed to initialize ShadCN-Vue"
    exit 1
  }
fi

echo "Nuxt project configured successfully" 