import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Component, OnInit } from '@angular/core';
import { ModalController, NavParams } from '@ionic/angular';
import * as _ from 'lodash';
import { AuthService } from 'src/app/services/auth.service';
import { ChatService } from 'src/app/services/chat.service';
import { NewGroupPage } from '../../new-group/new-group.page';
import { GroupMessagesPage } from '../group-messages.page';
import { ThemeService } from 'src/app/services/theme.service'

@Component({
  selector: 'app-group-contacts',
  templateUrl: './group-contacts.page.html',
  styleUrls: ['./group-contacts.page.scss'],
})
export class GroupContactsPage implements OnInit {
  showLoader: boolean;
  loggedUser: any;
  users = [];

  contact: string[] = [" Ana M.", "Andre F.", "Bruno G.", "Catarina T", "Tiago"];

  headers: HttpHeaders;
  options:any;
  listContacts: any[];
  contacts: any;
  textSearch:string;
  room:any;
  members:any;
  dm:any;
  isGroupCreated:boolean;
  groupName:string;
  selectedUserList:any;

  constructor(
    private modalController: ModalController,
    private http: HttpClient,
    private chatService: ChatService,
    private authService: AuthService,
    private navParams: NavParams,
    public ThemeService: ThemeService
  )
  {
    this.loggedUser = authService.ValidatedUserChat['data'];

    this.textSearch="";
    this.dm=null;
    this.room=null;
    this.isGroupCreated = this.navParams.get('isCreated');
    this.groupName = this.navParams.get('name');
    this.room = this.navParams.get('room');
    this.members = this.navParams.get('members');
  }

  ngOnInit() {
    this.loadUsers();
    this.getMembers();
    console.log(this.groupName);
    console.log(this.isGroupCreated);
  }

  loadUsers(){
    this.options = {
      headers: this.headers,
    };
    this.chatService.getAllUsers().subscribe((res:any)=>{
      if(this.members){
        this.contacts =  res.users.filter(f => !this.members.some(item => item._id === f._id));
      }
      else{
        this.contacts = res.users.filter(data => data.username != this.loggedUser.me.username);
      }
      this.users = this.contacts.sort((a,b) => {
        if(a.name < b.name){
          return -1;
        }
        if(a.name > b.name){
          return 1;
        }
        return 0;
      });
      console.log(this.users);

      this.showLoader = false;
    });
  }

  getMembers(){
    if(this.room.t == "p"){
      this.chatService.getGroupMembers(this.room._id).subscribe(res=>{
        this.members = res['members'];
        this.loadUsers();
      });
    }
    else if(this.room.t == "c"){
      this.chatService.getChannelMembers(this.room._id).subscribe(res=>{
        this.members = res['members'];
        this.loadUsers();
      });
    }
  }

  separateLetter(record, recordIndex, records){
    if(recordIndex == 0){
      return record.name[0];
    }

    let first_prev = records[recordIndex - 1].name[0];
    let first_current = record.name[0];

    if(first_prev != first_current){
      return first_current;
    }
    return null;
  }

  deleteMember(data:any){
    let body = {
      "roomId": this.room._id,
      "userId": data._id,
    }
    console.log(body);
    if(this.room.t == "p"){
      this.chatService.removeGroupMember(body).subscribe(res=>{
        console.log(res);
        this.getMembers();
      });
    }
    else if(this.room.t == "c"){
      this.chatService.removeChannelMember(body).subscribe(res=>{
        console.log(res);
        this.getMembers();
      });
    }
  }


  doRefresh(ev){
    this.loadUsers();
    this.getMembers();
    ev.target.complete();
  }

  async close(){
    this.modalController.dismiss();
  }

  onChange(event){
    this.textSearch = event.detail.value;
  }
  clicked(){
    console.log('clicked');

  }
  selectedContact(user:any){
  /*   this.groupName = this.room.name; */
    user.isChecked = !user.isChecked;


  }
  addContacts(room:any){
    console.log(room);
    this.selectedUserList = this.users.filter(function(contact) {
      return contact.isChecked == true;
    });
    console.log( this.selectedUserList);
    this.selectedUserList.forEach(user=>{
      let body ={
        "roomId":room._id,
        "userId":user._id,

      }
      this.chatService.addUserToGroup(body).subscribe(res=>{
        console.log(res['success']);
      });
    });
  }

  updateGroup(){
    this.chatService.getRoomInfo(this.room._id).subscribe(room=>{
      this.room = room['room'];
      this.addContacts(this.room);
      this.openGroupMessages(room['room']._id);
    });
  }

  async openGroupMessages(roomId:any){
    this.close();
    console.log(roomId);
    const modal = await this.modalController.create({
      component: GroupMessagesPage,
      componentProps: {
        roomId: roomId,
      },
      cssClass: 'group-messages',
      backdropDismiss: false
    });

    await modal.present();
    modal.onDidDismiss();
  }

}
