import { Component, OnInit } from '@angular/core';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { DatePipe } from '@angular/common';
import { UserService } from '../users/userService.service';
import { User } from '../users/user';
import { ActivatedRoute } from '@angular/router';

@Component({
  selector: 'app-portal-template-list',
  templateUrl: './portal-template-list.component.html',
  styleUrls: ['./portal-template-list.component.scss']
})
export class PortalTemplateListComponent implements OnInit {

  constructor(private userService: UserService, private fb: FormBuilder, private modalService: NgbModal, private datePipe: DatePipe, private route: ActivatedRoute) {
    this.filterArray = this.templateList;
    this.typeStatus = this.route.snapshot.paramMap.get('type')!
    console.log(this.route.snapshot.paramMap.get('type'));
  }
  get searchTerm(): string {
    return this._searchTerm;
  }
  set searchTerm(val: string) {
    this._searchTerm = val;
    this.filterArray = this.filter(val);
  }
  page = 1;
  pageSize = 7;

  typeStatus = "";

  templateList: User[] = this.userService.getUser();
  config: any;
  editUser: FormGroup | null = null;
  userDetail: User | null = null;

  filterArray: User[] | null = null;

  joiningDate: string | null = null;


  _searchTerm = '';

  ValidationMessage =
    [
      {
        Name: { required: 'Name is required.' }
      }, {
        Position: { required: 'Position is required.' }
      }, {
        Email: { required: 'Email is required.' }
      },
      {
        Mobile: { required: 'Mobile is required.' }
      },

      {
        DateOfJoining: { required: 'DOJ is required.' }
      },
      {
        Salary: { required: 'Salary is required.' }
      },
      {
        Projects: { required: 'Project is required.' }
      },
    ];

  formsErrors = [];

  ngOnInit() {
    this.editUser = this.fb.group({
      id: [''],
      Name: ['', Validators.required],
      Position: ['', Validators.required],
      Email: ['', Validators.required],
      Mobile: ['', Validators.required],
      DateOfJoining: ['', Validators.required],
      Salary: ['', Validators.required],
      Projects: ['', Validators.required],
    });
  }

  filter(v: string) {
    return this.templateList.filter(x => x.Name.toLowerCase().
      indexOf(v.toLowerCase()) !== -1 || x.Email.toLowerCase().indexOf(v.toLowerCase()) !== -1);
  }

  deleteUser(id: number): void {
    if (this.filterArray) {
      this.filterArray = this.filterArray.filter(user => user.id !== id);
    }
  }


  logValidationErrors(group: FormGroup) {
    // Object.keys(group.controls).forEach((key: string) => {
    //     const ac = group.get(key);

    //     this.formsErrors[key] = '';
    //     if (ac && !ac.valid && (ac.touched || ac.dirty)) {
    //         const message = this.ValidationMessage[key];
    //         for (const errorKey in ac.errors) {
    //             if (errorKey) {
    //                 this.formsErrors[key] += message[errorKey] + '    ';
    //             }
    //         }
    //     }
    //     if (ac instanceof FormGroup) {
    //         this.logValidationErrors(ac)
    //     }
    // })
  }





  openModal(targetModal: NgbModal, user: User | null) {
    this.modalService.open(targetModal, {
      centered: true,
      backdrop: 'static'
    });


    if (user != null) {

      if (user.DateOfJoining) {
        this.joiningDate = this.datePipe.
          transform(new Date(user.DateOfJoining), 'yyyy-MM-dd');
      }
      this.userDetail = user;
      this.editUser?.patchValue({
        Name: user.Name,
        Position: user.Position,
        Email: user.Email,
        Mobile: user.Mobile,
        DateOfJoining: user.DateOfJoining,
        Salary: user.Salary,
        Projects: user.Projects,
      });
    }

  }


  onSubmit() {
    if (this.userDetail != null) {
      const index = this.userService.getUser().indexOf(this.userDetail);

      if (this.editUser != null) {
        this.userDetail.Name = this.editUser.get('Name')?.value;
        this.userDetail.Position = this.editUser.get('Position')?.value;
        this.userDetail.Email = this.editUser.get('Email')?.value;
        this.userDetail.Mobile = this.editUser.get('Mobile')?.value;
        this.userDetail.DateOfJoining = this.editUser.get('DateOfJoining')?.value;
        this.userDetail.Salary = this.editUser.get('Salary')?.value;
        this.userDetail.Projects = this.editUser.get('Projects')?.value;
      }

      this.userService.getUser()[index] = this.userDetail;
    } else {
      this.userDetail = new User();

      this.userDetail.id = Math.max.apply(Math, this.userService.getUser().map(function (o) { return o.id; })) + 1;

      this.userDetail.Name = this.editUser?.get('Name')?.value;
      this.userDetail.Position = this.editUser?.get('Position')?.value;
      this.userDetail.Email = this.editUser?.get('Email')?.value;
      this.userDetail.Mobile = this.editUser?.get('Mobile')?.value;
      this.userDetail.DateOfJoining = new Date();
      this.userDetail.Salary = this.editUser?.get('Salary')?.value;
      this.userDetail.Projects = this.editUser?.get('Projects')?.value;
      this.userDetail.imagePath = 'assets/images/users/7.jpg';
      this.filterArray?.push(this.userDetail);

    }
    this.modalService.dismissAll();
    this.userDetail = null;

    this.joiningDate = '';
    this.ngOnInit();

  }


  closeBtnClick() {
    this.modalService.dismissAll();
    this.ngOnInit();
  }
}