#!/bin/bash

# ============================================================================
# COMPLETE SETUP SCRIPT FOR POLISH REAL ESTATE EXTRACTOR
# ============================================================================
# This script sets up everything you need on your server
# Run this on your production server
# ============================================================================

echo "╔════════════════════════════════════════════════════════════════╗"
echo "║   Polish Real Estate Data Extractor - Complete Setup          ║"
echo "╚════════════════════════════════════════════════════════════════╝"
echo ""

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Configuration - EDIT THESE
PROJECT_PATH="/var/www/your_project"  # Change this to your Django project path
VENV_PATH="$PROJECT_PATH/venv"        # Change if your virtualenv is elsewhere
APP_NAME="your_app"                   # Change to your Django app name

echo "${YELLOW}Configuration:${NC}"
echo "  Project Path: $PROJECT_PATH"
echo "  Virtualenv: $VENV_PATH"
echo "  App Name: $APP_NAME"
echo ""

read -p "Is this correct? (y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]
then
    echo "${RED}Please edit this script and update the configuration variables at the top${NC}"
    exit 1
fi

# ============================================================================
# STEP 1: Create directory structure
# ============================================================================

echo "${GREEN}[1/7] Creating directory structure...${NC}"

cd $PROJECT_PATH || exit 1

mkdir -p extractors/management/commands
touch extractors/__init__.py
touch extractors/management/__init__.py
touch extractors/management/commands/__init__.py

echo "  ✓ Created extractors/ directory structure"

# ============================================================================
# STEP 2: Download/Create extractor files
# ============================================================================

echo "${GREEN}[2/7] Creating extractor files...${NC}"
echo "${YELLOW}  Note: You need to copy the 3 Python files from the artifacts${NC}"
echo ""
echo "  Files needed in extractors/:"
echo "    1. polish_extractor_v2.py"
echo "    2. django_integration.py"
echo "    3. management/commands/extract_property_data.py"
echo ""
echo "  You can either:"
echo "    A) Copy them via SCP/SFTP"
echo "    B) Paste content directly using nano/vim"
echo ""

read -p "Have you copied all 3 files? (y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]
then
    echo "${YELLOW}Please copy the files first, then run this script again${NC}"
    echo ""
    echo "Example SCP command:"
    echo "  scp polish_extractor_v2.py user@server:$PROJECT_PATH/extractors/"
    echo "  scp django_integration.py user@server:$PROJECT_PATH/extractors/"
    echo "  scp extract_property_data.py user@server:$PROJECT_PATH/extractors/management/commands/"
    exit 1
fi

# ============================================================================
# STEP 3: Verify files exist
# ============================================================================

echo "${GREEN}[3/7] Verifying files...${NC}"

FILES=(
    "extractors/polish_extractor_v2.py"
    "extractors/django_integration.py"
    "extractors/management/commands/extract_property_data.py"
)

ALL_EXIST=true
for file in "${FILES[@]}"; do
    if [ -f "$file" ]; then
        echo "  ✓ Found $file"
    else
        echo "  ${RED}✗ Missing $file${NC}"
        ALL_EXIST=false
    fi
done

if [ "$ALL_EXIST" = false ]; then
    echo "${RED}Some files are missing. Please copy them and run again.${NC}"
    exit 1
fi

# ============================================================================
# STEP 4: Update django_integration.py imports
# ============================================================================

echo "${GREEN}[4/7] Updating imports in django_integration.py...${NC}"

# Check if import needs to be updated
if grep -q "from .polish_extractor import" extractors/django_integration.py; then
    echo "  Updating import statement..."
    sed -i 's/from \.polish_extractor import PolishRealEstateExtractor/from .polish_extractor_v2 import EnhancedPolishExtractor/g' extractors/django_integration.py
    sed -i 's/PolishRealEstateExtractor()/EnhancedPolishExtractor()/g' extractors/django_integration.py
    echo "  ✓ Updated imports"
else
    echo "  ✓ Imports already correct"
fi

# ============================================================================
# STEP 5: Update management command imports
# ============================================================================

echo "${GREEN}[5/7] Updating management command...${NC}"

# Update the management command to import correct app
sed -i "s/from myapp.models import Property/from $APP_NAME.models import Property/g" extractors/management/commands/extract_property_data.py
echo "  ✓ Updated app imports"

# ============================================================================
# STEP 6: Test the extractor
# ============================================================================

echo "${GREEN}[6/7] Testing extractor...${NC}"

source $VENV_PATH/bin/activate

# Create test script
cat > /tmp/test_extractor.py << 'EOF'
import sys
import os
import django

# Setup Django
sys.path.insert(0, os.environ.get('PROJECT_PATH'))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', os.environ.get('DJANGO_SETTINGS'))
django.setup()

from extractors.polish_extractor_v2 import EnhancedPolishExtractor

print("Testing extractor...")

extractor = EnhancedPolishExtractor()

test_text = """
Mieszkanie 3-pokojowe, 65 m2, 5 piętro/7.
Czynsz 2500 zł/mc. Warszawa, ul. Marszałkowska 15.
Rok budowy 2020. Winda, klimatyzacja, balkon, garaż.
"""

result = extractor.extract_all(test_text)

extracted_fields = sum(1 for v in result.values() if v is not None)

print(f"✓ Extractor working! Extracted {extracted_fields} fields")
print("\nSample extracted data:")
for key in ['rent', 'rooms', 'square_footage', 'city', 'floor']:
    if key in result and result[key]:
        print(f"  {key}: {result[key]}")

sys.exit(0)
EOF

export PROJECT_PATH=$PROJECT_PATH
export DJANGO_SETTINGS="${PROJECT_PATH##*/}.settings"

python /tmp/test_extractor.py

if [ $? -eq 0 ]; then
    echo "  ${GREEN}✓ Extractor test passed!${NC}"
else
    echo "  ${RED}✗ Extractor test failed${NC}"
    echo "  Please check the error messages above"
    exit 1
fi

rm /tmp/test_extractor.py

# ============================================================================
# STEP 7: Create logs directory and setup logging
# ============================================================================

echo "${GREEN}[7/7] Setting up logging...${NC}"

# Create logs directory
sudo mkdir -p /var/log/django
sudo chown $USER:$USER /var/log/django
touch /var/log/django/extractor.log

echo "  ✓ Created log directory"

# ============================================================================
# COMPLETION
# ============================================================================

echo ""
echo "╔════════════════════════════════════════════════════════════════╗"
echo "║                    SETUP COMPLETE! ✓                           ║"
echo "╚════════════════════════════════════════════════════════════════╝"
echo ""
echo "${GREEN}Installation successful!${NC}"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "QUICK START GUIDE"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "${YELLOW}1. Test with one property:${NC}"
echo "   cd $PROJECT_PATH"
echo "   source $VENV_PATH/bin/activate"
echo "   python manage.py shell"
echo ""
echo "   >>> from extractors.django_integration import PropertyExtractorService"
echo "   >>> from $APP_NAME.models import Property"
echo "   >>> service = PropertyExtractorService()"
echo "   >>> prop = Property.objects.first()"
echo "   >>> service.extract_and_save(prop, prop.description)"
echo ""
echo "${YELLOW}2. Extract all properties:${NC}"
echo "   python manage.py extract_property_data --all"
echo ""
echo "${YELLOW}3. Extract only missing data:${NC}"
echo "   python manage.py extract_property_data --missing-only"
echo ""
echo "${YELLOW}4. Extract specific properties:${NC}"
echo "   python manage.py extract_property_data --ids 1 2 3 4 5"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "AUTOMATED EXTRACTION (OPTIONAL)"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "To run extraction automatically every night at 2 AM:"
echo ""
echo "1. Edit crontab:"
echo "   crontab -e"
echo ""
echo "2. Add this line:"
echo "   0 2 * * * cd $PROJECT_PATH && $VENV_PATH/bin/python manage.py extract_property_data --missing-only >> /var/log/django/extractor.log 2>&1"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "MONITORING"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "View extraction logs:"
echo "   tail -f /var/log/django/extractor.log"
echo ""
echo "Check extraction statistics:"
echo "   python manage.py shell"
echo "   >>> from $APP_NAME.models import Property"
echo "   >>> total = Property.objects.count()"
echo "   >>> with_data = Property.objects.filter(rooms__isnull=False).count()"
echo "   >>> print(f'{with_data}/{total} properties have extracted data')"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "FILES CREATED"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "  📁 $PROJECT_PATH/extractors/"
echo "     ├── __init__.py"
echo "     ├── polish_extractor_v2.py          (Core extractor)"
echo "     ├── django_integration.py           (Django service)"
echo "     └── management/"
echo "         └── commands/"
echo "             └── extract_property_data.py (CLI command)"
echo ""
echo "  📄 /var/log/django/extractor.log       (Log file)"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "NEXT STEPS"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "1. Test extraction on a few properties first"
echo "2. Review extracted data for accuracy"
echo "3. Adjust patterns if needed for your specific sources"
echo "4. Run bulk extraction on all properties"
echo "5. Set up automated cron job"
echo ""
echo "${GREEN}Ready to extract! 🚀${NC}"
echo ""