import {
  AfterViewInit,
  ChangeDetectionStrategy,
  ChangeDetectorRef,
  Component,
  OnDestroy,
  OnInit,
  ViewChild,
  ViewEncapsulation,
} from '@angular/core';

import { ActivatedRoute, Router } from '@angular/router';
import { FormBuilder, FormControl, FormGroup } from '@angular/forms';
import { MatPaginator } from '@angular/material/paginator';
import { MatSort } from '@angular/material/sort';
import { Subject, takeUntil } from 'rxjs';
import { fuseAnimations } from '@fuse/animations';
import { FuseConfirmationService } from '@fuse/services/confirmation';

import { Popup } from '../models/popup';
import { PopupService } from '../services/popup.service';

@Component({
  selector: 'popup-redit',
  templateUrl: './redit.component.html',
  styles: [
    /* language=SCSS */
    `
      .popup-redit-grid {
        grid-template-columns: 48px auto 40px;

        @screen sm {
          grid-template-columns: 48px auto 112px 72px;
        }

        @screen md {
          grid-template-columns: 48px 112px auto 112px 72px;
        }

        @screen lg {
          grid-template-columns: 48px 112px auto 112px 96px 96px 72px;
        }
      }
    `,
  ],
  encapsulation: ViewEncapsulation.None,
  changeDetection: ChangeDetectionStrategy.OnPush,
  animations: fuseAnimations,
})
export class ReditComponent implements OnInit, AfterViewInit, OnDestroy {
  @ViewChild(MatPaginator) private _paginator!: MatPaginator;
  @ViewChild(MatSort) private _sort!: MatSort;

  isLoading = false;
  searchInputControl = new FormControl();
  popupForm!: FormGroup;
  editMode: boolean = false;
  categories = categories;
  popup: Popup | undefined;

  private _unsubscribeAll: Subject<any> = new Subject<any>();

  /**
   * Constructor
   */
  constructor(
    private _changeDetectorRef: ChangeDetectorRef,
    private _fuseConfirmationService: FuseConfirmationService,
    private _formBuilder: FormBuilder,
    private _route: ActivatedRoute,
    private _router: Router,
    private _popupService: PopupService
  ) {}

  // -----------------------------------------------------------------------------------------------------
  // @ Lifecycle hooks
  // -----------------------------------------------------------------------------------------------------

  /**
   * On init
   */
  ngOnInit(): void {
    // Create the contact form
    this.popupForm = this._formBuilder.group({
      id: [''],
      index: [''],
      title: [''],
      widthSize: [''],
      heightSize: [''],
      topMargin: [''],
      leftMargin: [''],
      site: [''],
      useOrNot: [''],
      content: [''],
    });

    this._popupService.popup$
      .pipe(takeUntil(this._unsubscribeAll))
      .subscribe((popup: Popup | undefined) => {
        if (!popup) {
          return;
        }

        this.popup = popup;
        this.popupForm.patchValue(popup);

        // Mark for check
        this._changeDetectorRef.markForCheck();
      });
  }

  /**
   * After view init
   */
  ngAfterViewInit(): void {}

  /**
   * On destroy
   */
  ngOnDestroy(): void {
    // Unsubscribe from all subscriptions
    this._unsubscribeAll.next(null);
    this._unsubscribeAll.complete();
  }

  // -----------------------------------------------------------------------------------------------------
  // @ Public methods
  // -----------------------------------------------------------------------------------------------------

  // -----------------------------------------------------------------------------------------------------
  // @ Private methods
  // -----------------------------------------------------------------------------------------------------

  /**
   * Create product
   */
  __createProduct(): void {}

  /**
   * Toggle product details
   *
   * @param productId
   */
  __toggleDetails(productId: string): void {}

  /**
   * Toggle edit mode
   *
   * @param editMode
   */
  toggleEditMode(editMode: boolean | null = null): void {
    if (editMode === null) {
      this.editMode = !this.editMode;
    } else {
      this.editMode = editMode;
    }

    // Mark for check
    this._changeDetectorRef.markForCheck();
  }

  /**
   * Track by function for ngFor loops
   *
   * @param index
   * @param item
   */
  __trackByFn(index: number, item: any): any {
    return item.id || index;
  }
}

export const categories = [
  {
    id: 'b899ec30-b85a-40ab-bb1f-18a596d5c6de',
    parentId: null,
    name: 'test.com',
    slug: 'mens',
  },
  {
    id: '07986d93-d4eb-4de1-9448-2538407f7254',
    parentId: null,
    name: 'kgon.com',
    slug: 'ladies',
  },
  {
    id: 'ad12aa94-3863-47f8-acab-a638ef02a3e9',
    parentId: null,
    name: 'kkk.com',
    slug: 'unisex',
  },
];
