//package com.example.nemophila;
//
//import androidx.fragment.app.FragmentActivity;
//
//import androidx.activity.result.ActivityResultLauncher;
//import androidx.activity.result.contract.ActivityResultContracts;
//import androidx.core.app.ActivityCompat;
//import androidx.core.content.ContextCompat;
//import androidx.lifecycle.ViewModelProvider;
//
//import android.app.ProgressDialog;
//import android.os.Bundle;
//import android.view.View;
//import android.widget.ImageButton;
//import android.widget.Toast;
//import android.annotation.SuppressLint;
//import android.content.pm.PackageManager;
//import android.location.Location;
//import android.location.LocationListener;
//import android.location.LocationManager;
//import android.content.Intent;
//import android.provider.Settings;
//import android.util.Log;
//import android.Manifest;
//
//import com.example.nemophila.entities.Shop;
//import com.example.nemophila.viewmodels.ShopsViewModel;
//import com.google.android.gms.maps.CameraUpdateFactory;
//import com.google.android.gms.maps.GoogleMap;
//import com.google.android.gms.maps.OnMapReadyCallback;
//import com.google.android.gms.maps.SupportMapFragment;
//import com.google.android.gms.maps.model.BitmapDescriptor;
//import com.google.android.gms.maps.model.BitmapDescriptorFactory;
//import com.google.android.gms.maps.model.CameraPosition;
//import com.google.android.gms.maps.model.GroundOverlay;
//import com.google.android.gms.maps.model.GroundOverlayOptions;
//import com.google.android.gms.maps.model.LatLng;
//import com.google.android.gms.maps.model.LatLngBounds;
//import com.google.android.gms.maps.model.Marker;
//import com.google.android.gms.maps.model.MarkerOptions;
//import com.example.nemophila.databinding.ActivityMainBinding;
//
//import java.util.Locale;
//
//public class MainActivity extends FragmentActivity implements OnMapReadyCallback,LocationListener {
// ShopsViewModel shopsViewModel;
//
// Nemophila nemophila;
// private GoogleMap mMap;
// private ActivityMainBinding binding;
// private LatLng currentLatlng = null;
// private LatLng initialLatlng;
// private LatLng shopLatlng;
// private LatLng testLatlng;
// private LatLng testLatlng2;
// private LatLng tapLatlng;
// private CameraPosition nowCamera;
// private LatLng nowLatlng;
//
// private GroundOverlay currentOverlay;
// LocationManager locationManager;
//
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// shopsViewModel = new ViewModelProvider(this).get(ShopsViewModel.class);
//
// binding = ActivityMainBinding.inflate(getLayoutInflater());
// setContentView(binding.getRoot());
////
//// nemophila = (Nemophila) this.getApplication();
////
//// ImageButton myPageButton = findViewById(R.id.myPageButton);
//// // lambda式
//// myPageButton.setOnClickListener( v -> {
//// Log.d("debug", "myPageButton, マイページに画面遷移");
//// Intent intent = new Intent(MainActivity.this, MyPageActivity.class);
//// startActivity(intent);
//// });
//
//
// if (ActivityCompat.checkSelfPermission(this,
// Manifest.permission.ACCESS_FINE_LOCATION)
// != PackageManager.PERMISSION_GRANTED) {
//
// requestPermissionLauncher.launch(
// Manifest.permission.ACCESS_FINE_LOCATION);
// }
// else{
// locationStart();
// }
//
// // Obtain the SupportMapFragment and get notified when the map is ready to be used.
// SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
// .findFragmentById(R.id.map);
// assert mapFragment != null;
// mapFragment.getMapAsync(this);
//
// }
//
// @Override
// public void onMapReady(GoogleMap googleMap) {
// mMap = googleMap;
//
// //ViewModelへのアクセス
// shopsViewModel = new ViewModelProvider(this).get(ShopsViewModel.class);
//
// // LiveDataへの購読
// shopsViewModel.getShopsLiveData().observe(this, shops -> {
// //受け取ったshopsに対してMarkerが立っているかを確認
// //対応するMarkerがなければMarkerを立てる
// for(Shop shop:shops) {
// if(shopsViewModel.getMarker(shop)==null){
//
// shopLatlng = new LatLng(shop.getLatitude(), shop.getLongitude());
// System.out.println(shopLatlng);
// Marker createMaker = mMap.addMarker(new MarkerOptions().position(shopLatlng).title(""));
// //マーカーに店情報を持たせる
// createMaker.setTag(shop);
// //ShopToMarkerに紐づけ
// shopsViewModel.setShopAndMarker(shop,createMaker);
// }
// }
//
// });
//
///*
// //研究室周辺の緯度経度
// double latitude = 34.7308032;
// double longitude = 135.2630272;
//
// //テスト用,仮ピン立て
// testLatlng = new LatLng(latitude, longitude);
// testLatlng2 = new LatLng(34.74, 135.26);
//
// //店Cの座標にカメラ移動
// //initialLatlng = new LatLng(34.5,12.3);
//
// //標準のマーカー(店用のピン)
// //setMarker(latitude, longitude);
//
// //アイコン画像をマーカーに設定
// //画像関連がわかっていないのでパス
// //setIcon(latitude, longitude);
// */
//
// //初期画面の座標(現在地をロードするまで表示)
// //initialLatlng = new LatLng(39,138);
// initialLatlng = new LatLng(nemophila.getCameraLatitude(),nemophila.getCameraLongitude());
// //初期画面に移動
// //mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(initialLatlng, 15f));
// mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(initialLatlng, nemophila.getZoom()));
//
//
// //画面が動いたとき
// mMap.setOnCameraIdleListener(() -> {
// //カメラの座標とZOOM倍率を保存
// //nowCamera = mMap.getCameraPosition();
// nemophila.setCameraLatitude(mMap.getCameraPosition().target.latitude);
// nemophila.setCameraLongitude(mMap.getCameraPosition().target.longitude);
// nemophila.setZoom(mMap.getCameraPosition().zoom);
//
// //nowLatlng = new LatLng(nowCamera.target.latitude, nowCamera.target.longitude);
// //nowZoom = nowCamera.zoom;
// //Shopの描画範囲を指定
// shopsViewModel.setViewArea(nemophila.getCameraLongitude()+1, nemophila.getCameraLatitude()+1, nemophila.getCameraLongitude()-1, nemophila.getCameraLatitude()-1);
// });
//
// /*
// //多分使わない
// // タップした時のリスナーをセット
// mMap.setOnMapClickListener(tapLocation -> {
// // map(ピン以外)をtapされた位置の緯度経度
// tapLatlng = new LatLng(tapLocation.latitude, tapLocation.longitude);
// mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(tapLatlng, nowZoom));
// shopsViewModel.setViewArea(tapLatlng.longitude+1, tapLatlng.latitude+1, tapLatlng.longitude-1, tapLatlng.latitude-1);
// });
// */
//
// //長押し時に店を作成し、その座標にピンを立てる
// //長押し時にその座標を保存し、投稿画面に移り、Shop作成完了時にはピンを立て、Shop画面に移行
// mMap.setOnMapLongClickListener(longpushLocation -> {
// //長押しされた位置の緯度経度を取得
// //LatLng newlocation = new LatLng(longpushLocation.latitude, longpushLocation.longitude);
// //Nemophilaに座標を保存
// nemophila.setCurrentLatitude(longpushLocation.latitude);
// nemophila.setCurrentLongitude(longpushLocation.longitude);
// //長押しした場合は今からShopを作成するので、CurrentShopをnullで登録しておく
// nemophila.setCurrentShop(null);
// //ShopCreate画面に遷移
// Intent intent = new Intent(MainActivity.this, ShopCreateActivity.class);
// startActivity(intent);
// });
//
// // ピンをクリックした場合
// mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
// @Override
// public boolean onMarkerClick(Marker marker) {
// //店の詳細と投稿一覧を表示
// //ここでshopActivityを呼び出す
//
// //下からクリックしたことを通知
// Toast.makeText(MainActivity.this, "ピンクリック", Toast.LENGTH_SHORT).show();
// //選んだ店をsetする(現状はnullになっているが後で直す)
// nemophila.setCurrentShop((Shop)marker.getTag());
// System.out.println(nemophila.getCurrentShop().getName());
//
// //ShopActivity画面に遷移
// Intent intent = new Intent(MainActivity.this, ShopActivity.class);
// startActivity(intent);
//
// return false;
// }
// });
//
// }
//
// //起動時から立っているピンの設定。完成時不要
// private void setMarker(double latitude, double longitude){
// MarkerOptions markerOptions = new MarkerOptions();
// MarkerOptions markerOptions2 = new MarkerOptions();
//
// markerOptions.position(testLatlng);
// markerOptions.title("ntlab");
// mMap.addMarker(markerOptions);
//
// //テスト用
// markerOptions2.position(testLatlng2);
// markerOptions2.title(null);
// mMap.addMarker(markerOptions2);
//
// }
//
// private void zoomMap(double latitude, double longitude){
// // 表示する東西南北の緯度経度を設定
// double south = latitude * (1-0.00005);
// double west = longitude * (1-0.00005);
// double north = latitude * (1+0.00005);
// double east = longitude * (1+0.00005);
//
// LatLng latlng = new LatLng(latitude,longitude);
//
// // LatLngBounds (LatLng southwest, LatLng northeast)
// //左下、右上
// LatLngBounds bounds = LatLngBounds.builder()
// .include(new LatLng(south , west))
// .include(new LatLng(north, east))
// .build();
//
// int width = getResources().getDisplayMetrics().widthPixels;
// int height = getResources().getDisplayMetrics().heightPixels;
//
// // static CameraUpdate.newLatLngBounds(LatLngBounds bounds, int width, int height, int padding)
// mMap.moveCamera(CameraUpdateFactory.
// newLatLngBounds(bounds, width, height, 0));
//
// //ズーム処理
// mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlng, nemophila.getZoom()));
// }
//
// //現在地の表示
// private void setIcon(double latitude, double longitude){
// //Drawable ic_current = ResourcesCompat.getDrawable(getResources(),R.drawable.icon_current,null);
// //更新前の現在地アイコンを消去
// if(currentOverlay != null) {
// currentOverlay.remove();
// }
//
// LatLng current_location = new LatLng(latitude,longitude);
//
// // マップに貼り付ける BitmapDescriptor生成
// BitmapDescriptor descriptor = BitmapDescriptorFactory.fromResource(R.drawable.icon_current);
// //Drawable ic_current = ResourcesCompat.getDrawable(getResources(),R.drawable.ic_current_location,null);
//
// // 貼り付設定
// GroundOverlayOptions overlayOptions = new GroundOverlayOptions();
// overlayOptions.image(descriptor);
//
// //public GroundOverlayOptions anchor (float u, float v)
// // (0,0):top-left, (0,1):bottom-left, (1,0):top-right, (1,1):bottom-right
// overlayOptions.anchor(0.5f, 0.5f);
//
// // 張り付け画像の大きさ メートル単位
// // public GroundOverlayOptions position(LatLng location, float width, float height)
// overlayOptions.position(current_location, 200f, 200f);
//
// // マップに貼り付け・アルファを設定
// currentOverlay = mMap.addGroundOverlay(overlayOptions);
//
// // 透明度
// assert currentOverlay != null;
// currentOverlay.setTransparency(0.8F);
// }
//
//
// private final ActivityResultLauncher<String>
// requestPermissionLauncher = registerForActivityResult(
// new ActivityResultContracts.RequestPermission(),
// isGranted -> {
// if (isGranted) {
// locationStart();
// }
// else {
// Toast toast = Toast.makeText(this,
// "これ以上なにもできません", Toast.LENGTH_SHORT);
// toast.show();
// }
// });
//
// //現在地の取得
// @SuppressLint("MissingPermission")
// private void locationStart(){
// Log.d("debug","locationStart()");
//
// // LocationManager インスタンス生成
// locationManager =
// (LocationManager) getSystemService(LOCATION_SERVICE);
//
// if (locationManager != null && locationManager.isProviderEnabled(
// LocationManager.GPS_PROVIDER)) {
//
// Log.d("debug", "location manager Enabled");
// } else {
// // GPSを設定するように促す
// Intent settingsIntent =
// new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
// startActivity(settingsIntent);
// Log.d("debug", "not gpsEnable, startActivity");
// }
//
// if (ContextCompat.checkSelfPermission(this,
// Manifest.permission.ACCESS_FINE_LOCATION) !=
// PackageManager.PERMISSION_GRANTED) {
// ActivityCompat.requestPermissions(this,
// new String[]{Manifest.permission.ACCESS_FINE_LOCATION,}, 1000);
//
// Log.d("debug", "checkSelfPermission false");
// return;
// }
//
// locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
// 1000, 50, this);
//
// }
//
// @Override
// public void onLocationChanged(Location location) {
// //初期画面は現在地を中心にするため...
// if (currentLatlng == null){
// //↓現在地ロード後画面中心を現在地にする場合
// //zoomMap(location.getLatitude(), location.getLongitude());
// //ロード画面の終了
// findViewById(R.id.LL_Load).setVisibility(View.GONE);
//
// //現在地ボタンを表示
// findViewById(R.id.currentButton).setVisibility(View.VISIBLE);
// ImageButton button1 = findViewById(R.id.currentButton);
//
// button1.setOnClickListener( v -> {
// Log.d("debug", "currentbutton, 現在地にカメラを移動");
// System.out.println(shopsViewModel.getShopsLiveData().getValue());
// //現在地にカメラを移動
// zoomMap(currentLatlng.latitude, currentLatlng.longitude);
// });
// }
//
// //現在地が変更されるたびに現在地アイコンを移動
// //LatLng型で受け取っておく
// currentLatlng = new LatLng(location.getLatitude(), location.getLongitude());
//
// //現在地アイコンを表示.このsetIcon内にzoomMap処理もあるので注意
// setIcon(location.getLatitude(),location.getLongitude());
// }
//
//
//
// @Override
// public void onProviderEnabled(String provider) {
//
// }
//
// @Override
// public void onProviderDisabled(String provider) {
//
// }
//
//}