import { Component, OnInit, ViewChild, AfterViewInit } from '@angular/core';
import { environment } from 'src/environments/environment';
import { MaskingService } from '../services/masking.service';
import lut from 'src/assets/images.json'
import { ActivatedRoute } from '@angular/router';

@Component({
  selector: 'app-image-selector',
  templateUrl: './image-selector.component.html',
  styleUrls: ['./image-selector.component.css']
})
export class ImageSelectorComponent implements OnInit, AfterViewInit {
  @ViewChild('url') url;
  @ViewChild('imageNumber') num;

  constructor(private maskSvc: MaskingService, private activatedRoute: ActivatedRoute) { }

  ngOnInit(): void {
  }

  ngAfterViewInit(): void {
    this.activatedRoute.queryParams.subscribe(params => {
      if (params.imageNumber) {
        this.updateImageByNum(params.imageNumber);
      } else {
        this.updateImageByNum(environment.defaultImageNumber);
      }
      setTimeout(() => {
        if (params.showMask) {
          if (params.showMask === 'true') {
            this.showMask();
          } else {
            this.showMask(params.showMask)
          }
        }
      });

    });
  }
  public showMask(url?: string): void {
    if (!url) {
      url = this.url.nativeElement.value.replace(environment.imageDirectoryName, environment.maskDirectoryName);
    }
    this.maskSvc.setMaskUrl(url);
  }

  public fromUrl(): void {
    this.showMask(prompt('Enter Mask URL').valueOf().replace('imgs', 'masks').replace('?raw=true', '')
      .replace('https://github.com', 'https://raw.githubusercontent.com').replace('/blob', ''));
  }

  public updateImage(): void {
    this.maskSvc.setImageUrl(this.url.nativeElement.value);
  }

  public updateImageByNum(number?: string): void {
    if (!['e', 'f'].includes(this.num.nativeElement.value.slice(-1))) {
      let imgN = this.num.nativeElement.value.padStart(4, '0');
      if (number) {
        imgN = number.padStart(4, '0');
        this.num.nativeElement.value = imgN;
      }
      if (lut.filter(element => element.id === imgN).length > 0) {
        let url = `${environment.imageDirectory}${lut.find(obj => obj.id === imgN).val}`;
        this.url.nativeElement.value = url;
        this.maskSvc.setImageUrl(url);
      }
      else {
        alert(`Image ${imgN} does not exist.`);
      }
    } else {
      let imgN = this.num.nativeElement.value.padStart(6, '0');
      if (number) {
        imgN = number.padStart(6, '0');
        this.num.nativeElement.value = imgN;
      }
      if (lut.filter(element => element.id === imgN).length > 0) {
        let url = `${environment.image2Directory}${lut.find(obj => obj.id === imgN).val}`;
        this.url.nativeElement.value = url;
        this.maskSvc.setImageUrl(url);
      }
      else {
        alert(`Image ${imgN} does not exist.`);
      }
    }
  }

}