import { Component, EventEmitter, OnInit, Output, TemplateRef, ViewChild } from '@angular/core';
import { CommonModule } from '@angular/common';
import { AbstractControl, UntypedFormBuilder, UntypedFormGroup, ValidationErrors, Validators } from '@angular/forms';
import { ActivatedRoute, Router } from '@angular/router';
import { AuthenticationService } from 'src/app/core/services/auth.service';
import { UserProfileService } from 'src/app/core/services/user.service';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { BaseService } from 'src/app/shared/service/base.service';
import { ToastService } from 'src/app/toast/toast-service';
import { RoleService } from '../role.service';


@Component({
  selector: 'app-add-role',
  templateUrl: './add-role.component.html',
  styleUrl: './add-role.component.scss'
})

export class AddRoleComponent implements OnInit{
  @ViewChild('scrollDataModal', { static: true }) scrollDataModal: TemplateRef<any>;

  @Output() roleAdded = new EventEmitter<void>();

  addrolefrom: UntypedFormGroup;
  submitted = false;
  error = '';
  successmsg = false;
  tenants:any;
  selectedTenant:any;

  constructor(private formBuilder: UntypedFormBuilder, 
    private route: ActivatedRoute, 
    private router: Router, 
    private authenticationService: AuthenticationService,
    private userService: UserProfileService,
    private modalService: NgbModal,
    public baseService: BaseService,
    private toastService: ToastService,
    private roleService: RoleService
  ) { }

    ngOnInit() {
      document.body.setAttribute('class', 'authentication-bg');
      // this.getAlltenant()
      this.roleService.tenant$.subscribe(data => {
        this.tenants = data;
      });
    }

    ngAfterViewInit() {
    }

    get f() { return this.addrolefrom.controls; }

    get RolenameControl(){
      return this.addrolefrom.get('Rolename'); 
    }

    onSubmit() {
      this.submitted = true;
      if (this.addrolefrom.invalid) {
        return;
      }
      console.log(this.addrolefrom.getRawValue());

      const formData = new URLSearchParams();
      formData.append('roleName', this.addrolefrom.get('Rolename').value);

      this.baseService.postData('access/roles', formData).subscribe(
        (data: any) => {
          if (data) {
          
          this.SaveTenantRole(data);
          // task to be done add aothe valu as attributes
          this.successmsg = true;
          this.roleAdded.emit();  // Emit event to notify parent component
          // You can also close the modal here if needed
          this.modalService.dismissAll();
          this.addrolefrom.reset();
          
          // Set the form as not submitted
          this.submitted = false;
          this.toastService.show('Role added successfully!', { classname: 'bg-success text-light', delay: 3000 });
        
          }
        },
        (err) => {
          console.log(err);
          this.toastService.show('Role Name alredy exist please enter new!', { classname: 'bg-danger text-light', delay: 3000 });
        }
        );
    }

    SaveTenantRole(role:any){
      
      if(this.selectedTenant!=null)
      {
        const formData = new URLSearchParams();
        formData.append('roleId', role.name);
        formData.append('tenantId', this.selectedTenant.tenantUUID);

        this.baseService.postData('tenants/saveTenantRole', formData).subscribe(
          (data: any) => {
            if (data) {
            console.log(data);
            // this.toastService.show('Role added successfully!', { classname: 'bg-success text-light', delay: 3000 });
          
            }
          },
          (err) => {
            console.log(err);
            // this.toastService.show('Error adding role!', { classname: 'bg-danger text-light', delay: 3000 });
          }
          );
      }
    }

    openModal() {
      this.modalService.open(this.scrollDataModal, { scrollable: true ,windowClass:'modal-holder', centered: true, backdrop: "static"});

      this.addrolefrom = this.formBuilder.group({
        Rolename:['', Validators.required],
        Tenant:['']
      });

    }
   

}
