/**
 * Exemplo de código Android para enviar GPS para o servidor
 * Este arquivo mostra como integrar no app Android
 */

// ===== LocationService.java =====
public class LocationService {
    private static final String API_URL = "https://sistemas.pinheiroempresas.com.br/controlefrota/backend-php/api-simples-v2.php";
    private static final int LOCATION_UPDATE_INTERVAL = 30000; // 30 segundos
    
    private int viagemId;
    private OkHttpClient httpClient;
    
    public LocationService(int viagemId) {
        this.viagemId = viagemId;
        this.httpClient = new OkHttpClient();
    }
    
    // Enviar posição GPS para o servidor
    public void enviarPosicaoGPS(double latitude, double longitude, float velocidade, float precisao) {
        // Criar JSON com dados GPS
        JSONObject dados = new JSONObject();
        try {
            dados.put("viagem_id", viagemId);
            dados.put("latitude", latitude);
            dados.put("longitude", longitude);
            dados.put("velocidade", velocidade * 3.6f); // m/s para km/h
            dados.put("precisao", precisao);
            dados.put("altitude", 0); // Se disponível
            dados.put("bearing", 0);  // Se disponível
        } catch (JSONException e) {
            Log.e("GPS", "Erro ao criar JSON", e);
            return;
        }
        
        // Enviar para o servidor
        RequestBody body = RequestBody.create(
            dados.toString(), 
            MediaType.parse("application/json")
        );
        
        Request request = new Request.Builder()
            .url(API_URL + "?acao=atualizar-posicao")
            .post(body)
            .addHeader("Content-Type", "application/json")
            .addHeader("User-Agent", "ControleApp-Android/1.0")
            .build();
        
        // Executar em background
        httpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.e("GPS", "Erro ao enviar GPS", e);
            }
            
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()) {
                    String responseBody = response.body().string();
                    Log.d("GPS", "Posição enviada: " + responseBody);
                } else {
                    Log.e("GPS", "Erro HTTP: " + response.code());
                }
            }
        });
    }
}

// ===== MainActivity.java - Integração =====
public class MainActivity extends AppCompatActivity {
    private LocationManager locationManager;
    private LocationService locationService;
    private int viagemAtualId = 0;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    }
    
    // Iniciar rastreamento quando viagem começar
    public void iniciarViagem(int viagemId) {
        this.viagemAtualId = viagemId;
        this.locationService = new LocationService(viagemId);
        
        // Solicitar permissões se necessário
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) 
            == PackageManager.PERMISSION_GRANTED) {
            
            iniciarRastreamentoGPS();
        } else {
            // Solicitar permissão
            ActivityCompat.requestPermissions(this, 
                new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 
                100);
        }
    }
    
    private void iniciarRastreamentoGPS() {
        LocationListener locationListener = new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {
                // Enviar nova posição para o servidor
                locationService.enviarPosicaoGPS(
                    location.getLatitude(),
                    location.getLongitude(),
                    location.getSpeed(),
                    location.getAccuracy()
                );
                
                // Atualizar UI local
                atualizarUIComNovaLocalizacao(location);
            }
            
            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {}
            
            @Override
            public void onProviderEnabled(String provider) {}
            
            @Override
            public void onProviderDisabled(String provider) {}
        };
        
        // Registrar listener GPS
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) 
            == PackageManager.PERMISSION_GRANTED) {
            
            locationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER,
                30000, // 30 segundos
                10,    // 10 metros
                locationListener
            );
        }
    }
    
    private void atualizarUIComNovaLocalizacao(Location location) {
        // Atualizar interface do usuário
        Log.d("GPS", "Nova posição: " + location.getLatitude() + ", " + location.getLongitude());
    }
    
    // Parar rastreamento quando viagem terminar
    public void finalizarViagem() {
        if (locationManager != null) {
            locationManager.removeUpdates(locationListener);
        }
        locationService = null;
        viagemAtualId = 0;
    }
}

// ===== Permissões no AndroidManifest.xml =====
<!--
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />

<service android:name=".LocationService" 
         android:enabled="true" 
         android:exported="false" />
-->

// ===== build.gradle (dependências) =====
/*
dependencies {
    implementation 'com.squareup.okhttp3:okhttp:4.10.0'
    implementation 'org.json:json:20210307'
}
*/ 