import { ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';
import { NgbActiveModal, NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
import { ModalConfig } from 'src/app/interfaces/common-interfaces';
import { ModalInterface } from 'src/app/interfaces/modal-interface';
import { AccountInfoService } from 'src/app/services/accountInfo/account-info.service';
import { DataTransmitterService } from 'src/app/services/dataTransmitter/data-transmitter.service';
import { environment } from 'src/environments/environment';

@Component({
  standalone: false,
  selector: 'app-opt-in-pop-up',
  templateUrl: './opt-in-pop-up.component.html',
  styleUrls: ['./opt-in-pop-up.component.scss']
})
export class OptInPopUpComponent implements ModalInterface {

  optInConfig: ModalConfig = {
    showHeader: false,
    title: ''
  };
  imgUrl: string = environment.imageUrl;
  @Input() optInData = {
    xu_mrktng_fax_opt_in_pref: 0,
    legal_fax: '',
    xu_mrktng_fax_opt_popup_displayed: 0
  };

  modalComponent!: NgbModalRef;
  sitename!: string;

  constructor(public activeModel: NgbActiveModal, public modalService: NgbModal, private accountInfoService: AccountInfoService, private dataTransmitter: DataTransmitterService) { }

  ngOnInit(): void {
    this.dataTransmitter.sitename.subscribe((sitename) => {
      this.sitename = sitename;
    });
  }

  /**
   * Open current pop up
   * @returns void
   */
  openModal(): void {
    this.modalComponent = this.modalService?.open(OptInPopUpComponent, {size: 'sm'});
  }

  /**
   * Close current pop up
   * @returns void
   */
  closeModal(): void {
    this.modalService.dismissAll();
  }

  /**
   * Sets data required to display the modal if any.
   * @param data
   * @returns void
   */
  setData(data: any): void {
    this.modalComponent.componentInstance.optInData = data;
  }

  /**
   * Save data from marketing opt in preference pop up.
   * @returns void
   */
  saveMrktngOptInPrefs (): void {
    this.optInData.xu_mrktng_fax_opt_popup_displayed = 1;
    this.optInData.xu_mrktng_fax_opt_in_pref = Number(this.optInData.xu_mrktng_fax_opt_in_pref);
    this.accountInfoService.saveUserInfo(this.optInData).subscribe();
    this.closeModal();
  }
}
