import { AuthServiceService } from './../../../shared/auth-service.service';
import { NgxSpinnerService } from 'ngx-spinner';
import { ActivatedRoute, Router, Params } from '@angular/router';
import { DashboardService } from './../../../shared/dashboard.service';
import { HttpClient } from '@angular/common/http';
import { Component, OnInit } from '@angular/core';
import { Modal } from 'ngx-modialog/plugins/bootstrap';
import { UserService } from '../../../shared/user.service';
import { ToastrService } from 'ngx-toastr';


@Component({
  selector: 'app-location-list',
  templateUrl: './location-list.component.html',
  styleUrls: ['./location-list.component.css']
})
export class LocationListComponent implements OnInit {

  constructor(private http: HttpClient,
    private route: ActivatedRoute,
    private router: Router,
    private modal: Modal,
    private userSer: UserService,
    private spinner: NgxSpinnerService,
    private authSer: AuthServiceService,
    private toastr: ToastrService,
    private dashboardSer: DashboardService) { }

    dataList = [];
    pages= [];
    pageId: number;
    Ids = [];
    count: number;
    perPagePagenation: number;
    currentPage:number = 1;
    filtterStatus = 'all';
    selectedAll: any;
    userLoginId:number;
    serviceId:number;
    dataTableNumber: number = 5;
    absorpationListIds = [];
    dataListIds = [];

  ngOnInit() {

      //init values of permisions
      this.authSer.showAddBtn = false;
      this.authSer.showDeleteBtn = false;
      this.authSer.showEditBtn = false;
      this.authSer.showPermissionsBtn = false;
      //show / hide notification search in header
      this.authSer.notificationLogin = true;
      this.authSer.showSearchHeader = false;
      this.authSer.showHeaderLogin = false;
      this.authSer.showHeaderDashBoard = true;
      this.authSer.showDashboardHeader = true;
      this.authSer.internalHeader = false;

      this.route.params.subscribe(
        (parmas: Params) => {
          this.pageId =  +parmas['locatioListPageId'];
          localStorage.setItem('pageIdActive', parmas['locatioListPageId']);
        }
      );

      this.route.parent.params.subscribe(
        (params:Params) => {
            this.userLoginId = params['userID'];
            this.serviceId = params['serviceID'];
           
    
            this.userSer.getPagesPermetiotns(this.userLoginId, this.serviceId).subscribe(
              (responce) => {
                console.log(responce);
                this.pages = responce['pages'];
                for(let i = 0; i< this.pages.length; i++) {
                  if(this.pages[i].id == 52) {
                    if(this.pages[i]['permissions'][0].name == 'define_locations') {
                      this.authSer.showAddBtn = true;
                      this.authSer.showEditBtn = true;
                      this.authSer.showDeleteBtn = true;
                    } else {
                      console.log('no permissions');
                    }
                  } else {
                    console.log('no events');
                  }
                }
                this.spinner.hide();
              },
              (error) => {console.log(error)}
            );
          }
        );
          console.log('current page',this.pageId)
        this.dashboardSer.getListData(this.pageId, this.currentPage ,this.dataTableNumber).subscribe(
          (response) => {
            console.log(response);
            this.dataList = response['locations'];
            this.count = response['count'];
            this.perPagePagenation = response['per_page'];
           
          },
          (error) => {
            console.log(error);
          }
  
        );

  }
//make all checkbox of user checked 
selectAll() {
  for (var i = 0; i < this.absorpationListIds.length; i++) {
    this.absorpationListIds[i].selected = this.selectedAll;
  }
}

checkIfAllSelected() {
  this.selectedAll = this.absorpationListIds.every(function(item:any) {
    return item.selected == true;
  });
}

 //filtter function
 filtterFunc(data) {
  this.dataList =[];
  this.absorpationListIds = [];
  console.log(data.target.value);
  const dataSearch = data.target.value;     
  this.currentPage = 1;
  console.log('search curent page', this.currentPage);
  console.log('search page id', this.pageId);

  this.dashboardSer.getDataUSerSearchBar(dataSearch, this.pageId, this.currentPage, this.dataTableNumber).subscribe(
    (responce) => {
      console.log(responce);
      this.dataList = responce['locations'];
      this.count = responce['count'];
      this.perPagePagenation = responce['per_page'];
      console.log('filtter count', this.count);
      console.log('filtter perPagePAgenation', this.perPagePagenation);
    },
    (error) => {
      console.log(error)
    }
  );
};

onPageChange(pagenationNumber) {
  this.spinner.show();
  this.currentPage = pagenationNumber;
  this.absorpationListIds = [];
  console.log(pagenationNumber);
  console.log(this.pageId);
  this.dashboardSer.getListData(this.pageId, pagenationNumber, this.dataTableNumber).subscribe(
    (responce) => {
      console.log(responce);
      this.dataList = responce['locations'];
      this.count = responce['count'];
      this.perPagePagenation = responce['per_page'];
      console.log('FFFFFF', this.absorpationListIds);
      this.spinner.hide();
    },
    (error) => {
      console.log(error);
      this.spinner.hide();
    }
  );
}
 //determine the list count from select element 
 onGetValue(event) {
  this.spinner.show();
  this.absorpationListIds = [];
  this.dataTableNumber = event.target.value;
  this.dashboardSer.getListData(this.pageId, this.currentPage, this.dataTableNumber).subscribe(
    (responce) => {
      console.log(responce);
      this.absorpationListIds = responce['locations'];
      this.count = responce['count'];
      this.perPagePagenation = responce['per_page'];
      this.spinner.hide();
    },
    (error) => {
      console.log(error);
      this.spinner.hide();
    }
  );
};
onGetValueFiltter(event) {
  console.log(event.target.value)
  this.spinner.show();
  this.dataList = [];
  const typeId = event.target.value;
  this.filtterStatus = event.target.value;
  console.log(this.filtterStatus);
  this.http.get(this.authSer.pathApi +'/page_list/' + this.pageId + '/' + this.currentPage + '/' + this.dataTableNumber + '/' + typeId).subscribe(
    (responce) => {
      console.log(responce);
      this.dataList = responce['locations'];
      this.count = responce['count'];
      this.perPagePagenation = responce['per_page'];
      this.spinner.hide();
      console.log('UrL>>', this.authSer.pathApi +'/page_list/' + this.pageId + '/' + this.currentPage + '/' + this.dataTableNumber + '/' + typeId)
    },
    (error) => {
      console.log(error);
    }
  );
}

onDelete() {

  this.dataListIds = [];
  for(let i = 0; i < this.dataList.length; i++) {
    if(this.dataList[i].selected == true) {
      this.dataListIds.push(this.dataList[i].id);
    }
  }


  console.log(this.dataListIds);

  if(this.dataListIds.length > 0) {
    const dialogRef = this.modal.alert()
    .size('sm')
    .showClose(true)
    .title('تأكيد الحذف')
    .body(`
        <h4>هل ترغب في حذف العناصر المحدده ؟ </h4>
        `)
    .open();

      dialogRef.result
      .then( result =>
        this.dashboardSer.deleteItem(this.dataListIds , this.pageId).subscribe(
          (responce) => {
            console.log(responce);
            this.toastr.success('تم الحذف');
            this.spinner.show();
            this.dataList = [];
             //get list data
            this.dashboardSer.getListData(this.pageId, this.currentPage ,this.dataTableNumber).subscribe(
              (responce) => {
                console.log(responce);
                this.dataList = responce['locations'];
                this.count = responce['count'];
                this.perPagePagenation = responce['per_page'];
                this.spinner.hide();
              },
              (error) => {
                console.log(error);
                this.spinner.hide();
              }
            );
          },
          (error) => {
            console.log(error);
            this.spinner.hide();
            },
          )
      );
  } else {
    this.toastr.warning('لم يتم إختيار أي عنصر للمسح !');
  }
};
onAdd() {
  this.router.navigate(['service/' + this.userLoginId + '/' + this.serviceId + '/' + 'definitionLocation/add']);
}

onEdit(editId: number) {
  this.router.navigate(['service/' + this.userLoginId + '/' + this.serviceId + '/' + 'definitionLocation/edit/ ' + editId]);
}
}
