package com.wifi.server.sender;


import android.net.wifi.p2p.WifiP2pDevice;
import android.net.wifi.p2p.WifiP2pDeviceList;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.view.View;

import com.wifi.server.R;
import com.wifi.server.base.BaseActivity;
import com.wifi.server.dialogs.DialogEventListener;
import com.wifi.server.dialogs.DialogHelper;
import com.wifiscanner.listener.WifiP2PConnectionCallback;
import com.wifiscanner.service.WifiP2PService;
import com.wifiscanner.service.WifiP2PServiceImpl;
import com.wifiscanner.utils.Utils;

import java.util.Map;

public class SenderActivity extends BaseActivity implements WifiP2PConnectionCallback, OnSenderUIListener, DialogEventListener {

    private boolean isSuccess = Boolean.FALSE;
    public WifiP2PService wifiP2PService;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_container);

        initToolBar();
        updateTitle(getString(R.string.title_receiver));
        redirectToDeviceListScreen();

        wifiP2PService = new WifiP2PServiceImpl.Builder()
                .setSender(this)
                .setWifiP2PConnectionCallback(this)
                .build();
        wifiP2PService.onCreate();
    }

    @Override
    protected void onResume() {
        super.onResume();
        wifiP2PService.onResume();
    }

    @Override
    protected void onStop() {
        super.onStop();
        wifiP2PService.onStop();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        wifiP2PService.onDestroy();
    }

    @Override
    public void redirectToDeviceListScreen() {
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                DeviceListFragment.newInstance()).commitAllowingStateLoss();
    }

    @Override
    public void onScanStarted() {
        Fragment fragment = getCurrentFragment();
        if(fragment instanceof DeviceListFragment) ((DeviceListFragment)fragment).onScanStarted();
    }

    @Override
    public void onDeviceAvailable(WifiP2pDeviceList wifiP2pDeviceList) {
        Fragment fragment = getCurrentFragment();
        if(fragment instanceof DeviceListFragment) ((DeviceListFragment)fragment).onDeviceAvailable(wifiP2pDeviceList);
    }


    @Override
    public void redirectToProcessScreen(WifiP2pDevice wifiP2pDevice) {
        getSupportFragmentManager().beginTransaction()
                .setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right)
                .replace(R.id.fragment_container, SenderFragment.newInstance(wifiP2pDevice))
                .commitAllowingStateLoss();
    }

    @Override
    public void onConnectionCompleted() {
        Fragment fragment = getCurrentFragment();
        if(fragment instanceof SenderFragment) ((SenderFragment)fragment).onConnectCompleted();
    }

    @Override
    public void onDataTransferStarted() {
        Fragment fragment = getCurrentFragment();
        if(fragment instanceof SenderFragment) ((SenderFragment)fragment).onDataStarted();
    }

    @Override
    public void onDataTransferCompleted(String s) {
        redirectToSuccessScreen(R.drawable.ic_p_success, s);
    }

    @Override
    public void redirectToSuccessScreen(final int imageResourceId, final String message) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if(!isSuccess) {
                    isSuccess = Boolean.TRUE;
                    DialogHelper.getInstance().displayDialog(SenderActivity.this, message,
                            imageResourceId, false, SenderActivity.this);
                }
            }
        });
    }


    private Fragment getCurrentFragment() {
        FragmentManager fragmentManager = getSupportFragmentManager();
        Fragment currentFragment = fragmentManager.findFragmentById(R.id.fragment_container);
        return currentFragment;
    }

    @Override
    public void onPositiveButtonClicked(View view) {
        finish();
    }

    @Override
    public void onInitiateDiscovery() {
        onScanStarted();
    }

    @Override
    public void onDiscoverySuccess() {

    }

    @Override
    public void onDiscoveryFailure() {

    }

    @Override
    public void onPeerAvailable(WifiP2pDeviceList wifiP2pDeviceList) {
        onDeviceAvailable(wifiP2pDeviceList);
    }

    @Override
    public void onPeerStatusChanged(WifiP2pDevice wifiP2pDevice) {

    }

    @Override
    public void onPeerConnectionSuccess() {
        onConnectionCompleted();
        onDataTransferStarted();
    }

    @Override
    public void onPeerConnectionFailure() {

    }

    @Override
    public void onPeerDisconnectionSuccess() {

    }

    @Override
    public void onPeerDisconnectionFailure() {

    }

    @Override
    public void onDataTransferring() {}

    @Override
    public void onDataTransferredSuccess() {}

    @Override
    public void onDataTransferredFailure() {}

    @Override
    public void onDataReceiving() {
        onDataTransferStarted();
    }

    @Override
    public void onDataReceivedSuccess(String s) {
        onDataTransferCompleted(s);
    }

    @Override
    public void onDataReceivedFailure() {}
}