#!/bin/bash

# Script para testar a biblioteca em um novo projeto Expo
# Usage: ./test-library.sh

set -e

echo "🧪 Iniciando teste da biblioteca react-native-bluetooth-datecs-printer"
echo ""

# Configuração
LIBRARY_PATH="$(pwd)"
TEST_DIR="../test-printer-app"
TEST_APP_NAME="test-printer-app"

echo "📦 Biblioteca: $LIBRARY_PATH"
echo "📁 Diretório de teste: $TEST_DIR"
echo ""

# Remover projeto de teste anterior se existir
if [ -d "$TEST_DIR" ]; then
    echo "🗑️  Removendo projeto de teste anterior..."
    rm -rf "$TEST_DIR"
fi

# Criar novo projeto Expo
echo "🆕 Criando novo projeto Expo SDK 54..."
cd ..
npx create-expo-app@latest $TEST_APP_NAME --template blank
cd $TEST_APP_NAME

echo ""
echo "📥 Instalando dependências..."
npm install

echo ""
echo "🔗 Instalando biblioteca local..."
npm install "file:$LIBRARY_PATH"

echo ""
echo "📦 Instalando expo-build-properties..."
npm install expo-build-properties

echo ""
echo "⚙️  Configurando app.json..."
cat > app.json << 'EOF'
{
  "expo": {
    "name": "test-printer-app",
    "slug": "test-printer-app",
    "version": "1.0.0",
    "orientation": "portrait",
    "userInterfaceStyle": "light",
    "assetBundlePatterns": [
      "**/*"
    ],
    "ios": {
      "supportsTablet": true
    },
    "android": {
      "permissions": [
        "BLUETOOTH",
        "BLUETOOTH_ADMIN",
        "BLUETOOTH_CONNECT",
        "BLUETOOTH_SCAN",
        "ACCESS_FINE_LOCATION",
        "ACCESS_COARSE_LOCATION"
      ],
      "package": "com.test.printerapp"
    },
    "plugins": [
      [
        "expo-build-properties",
        {
          "android": {
            "compileSdkVersion": 36,
            "targetSdkVersion": 36,
            "minSdkVersion": 26,
            "buildToolsVersion": "35.0.0"
          }
        }
      ]
    ]
  }
}
EOF

echo ""
echo "📝 Criando App.tsx de teste..."
cat > App.tsx << 'EOF'
import React, { useState } from 'react';
import { View, Button, Text, StyleSheet, SafeAreaView, Alert, PermissionsAndroid, Platform } from 'react-native';
import { RNBluetoothDatecsPrinter } from 'react-native-bluetooth-datecs-printer';

export default function App() {
  const [status, setStatus] = useState('Pronto para testar');
  const [devices, setDevices] = useState([]);

  const requestPermissions = async () => {
    if (Platform.OS === 'android' && Platform.Version >= 31) {
      const granted = await PermissionsAndroid.requestMultiple([
        PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT,
        PermissionsAndroid.PERMISSIONS.BLUETOOTH_SCAN,
      ]);
      return (
        granted['android.permission.BLUETOOTH_CONNECT'] === 'granted' &&
        granted['android.permission.BLUETOOTH_SCAN'] === 'granted'
      );
    }
    return true;
  };

  const testScan = async () => {
    try {
      setStatus('Solicitando permissões...');
      const hasPermission = await requestPermissions();
      
      if (!hasPermission) {
        setStatus('❌ Permissões negadas');
        return;
      }

      setStatus('Buscando dispositivos...');
      const deviceList = await RNBluetoothDatecsPrinter.getDeviceList();
      setDevices(deviceList);
      setStatus(`✅ ${deviceList.length} dispositivos encontrados`);
      
      Alert.alert(
        'Dispositivos Encontrados',
        `${deviceList.length} dispositivo(s) pareado(s):\n\n${deviceList.map(d => d.name).join('\n')}`
      );
    } catch (error) {
      setStatus(`❌ Erro: ${error.message}`);
      Alert.alert('Erro', error.message);
    }
  };

  return (
    <SafeAreaView style={styles.container}>
      <View style={styles.content}>
        <Text style={styles.title}>🧪 Teste da Biblioteca</Text>
        <Text style={styles.subtitle}>Datecs Printer</Text>
        
        <View style={styles.statusBox}>
          <Text style={styles.statusLabel}>Status:</Text>
          <Text style={styles.statusText}>{status}</Text>
        </View>

        <View style={styles.infoBox}>
          <Text style={styles.infoText}>✅ Expo SDK 54</Text>
          <Text style={styles.infoText}>✅ Android SDK 36</Text>
          <Text style={styles.infoText}>✅ React Native 0.76+</Text>
          <Text style={styles.infoText}>✅ AndroidX</Text>
        </View>

        <View style={styles.buttonContainer}>
          <Button title="🔍 Testar Scan de Dispositivos" onPress={testScan} />
        </View>

        {devices.length > 0 && (
          <View style={styles.devicesBox}>
            <Text style={styles.devicesTitle}>Dispositivos:</Text>
            {devices.map((device, index) => (
              <Text key={index} style={styles.deviceText}>
                • {device.name || 'Desconhecido'} ({device.address})
              </Text>
            ))}
          </View>
        )}

        <View style={styles.footer}>
          <Text style={styles.footerText}>
            Se a busca funcionou, a biblioteca está OK! ✅
          </Text>
        </View>
      </View>
    </SafeAreaView>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#f5f5f5',
  },
  content: {
    flex: 1,
    padding: 20,
  },
  title: {
    fontSize: 32,
    fontWeight: 'bold',
    textAlign: 'center',
    marginBottom: 5,
    color: '#333',
  },
  subtitle: {
    fontSize: 18,
    textAlign: 'center',
    marginBottom: 30,
    color: '#666',
  },
  statusBox: {
    backgroundColor: '#fff',
    padding: 20,
    borderRadius: 12,
    marginBottom: 20,
    borderWidth: 2,
    borderColor: '#007bff',
  },
  statusLabel: {
    fontSize: 14,
    color: '#666',
    marginBottom: 8,
    fontWeight: '600',
  },
  statusText: {
    fontSize: 18,
    fontWeight: 'bold',
    color: '#333',
  },
  infoBox: {
    backgroundColor: '#e7f3ff',
    padding: 20,
    borderRadius: 12,
    marginBottom: 20,
    borderWidth: 1,
    borderColor: '#b3d9ff',
  },
  infoText: {
    fontSize: 16,
    color: '#004085',
    marginBottom: 8,
    fontWeight: '500',
  },
  buttonContainer: {
    marginBottom: 20,
  },
  devicesBox: {
    backgroundColor: '#d4edda',
    padding: 20,
    borderRadius: 12,
    marginBottom: 20,
    borderWidth: 1,
    borderColor: '#c3e6cb',
  },
  devicesTitle: {
    fontSize: 18,
    fontWeight: 'bold',
    color: '#155724',
    marginBottom: 12,
  },
  deviceText: {
    fontSize: 14,
    color: '#155724',
    marginBottom: 6,
  },
  footer: {
    backgroundColor: '#fff3cd',
    padding: 15,
    borderRadius: 12,
    borderWidth: 1,
    borderColor: '#ffc107',
  },
  footerText: {
    fontSize: 14,
    color: '#856404',
    textAlign: 'center',
    fontWeight: '500',
  },
});
EOF

echo ""
echo "🏗️  Executando prebuild..."
npx expo prebuild --clean

echo ""
echo "✅ Projeto de teste criado com sucesso!"
echo ""
echo "📱 Para executar o teste:"
echo "   cd $TEST_DIR"
echo "   npx expo run:android"
echo ""
echo "🧹 Para limpar depois:"
echo "   cd .."
echo "   rm -rf $TEST_DIR"
echo ""
