import { map, tap } from 'rxjs/operators';
import { Component, OnInit, Inject, OnDestroy } from '@angular/core';

import { Store, select } from '@ngrx/store';

import * as AppSotre from '@app/store';
import { Observable, Subscription } from 'rxjs';
import {
  WindowIdle,
  UCAP_NATIVE_SERVICE,
  NativeService
} from '@ucap-webmessenger/native';
import { StatusProtocolService } from '@ucap-webmessenger/protocol-status';
import { StatusType, StatusCode } from '@ucap-webmessenger/core';

@Component({
  selector: 'app-page-messenger-main',
  templateUrl: './main.page.component.html',
  styleUrls: ['./main.page.component.scss']
})
export class MainPageComponent implements OnInit {
  selectedChat$: Observable<string | null>;
  idleStateChangedSubscription: Subscription;

  constructor(
    @Inject(UCAP_NATIVE_SERVICE) private nativeService: NativeService,
    private store: Store<any>,
    private statusProtocolService: StatusProtocolService
  ) {}

  ngOnInit(): void {
    this.selectedChat$ = this.store.pipe(
      select(AppSotre.MessengerSelector.ChatSelector.selectedRoom)
    );

    this.idleStateChangedSubscription = this.nativeService
      .idleStateChanged()
      .subscribe(action => {
        console.log(action);
        let statusType: StatusCode;

        if (action === 'IDLE') {
          // away
          statusType = StatusCode.Away;
        } else {
          // online
          statusType = StatusCode.OnLine;
        }

        this.statusProtocolService.status({
          statusDivisionType: StatusType.Messenger,
          statusType,
          statusMessage: ''
        });
      });
  }

  OnDestroy(): void {
    if (!!this.idleStateChangedSubscription) {
      this.idleStateChangedSubscription.unsubscribe();
    }
  }
}
