import { Component, OnInit } from '@angular/core';
import { NgbDate, NgbCalendar, NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap';
import { NgbModal, ModalDismissReasons } from '@ng-bootstrap/ng-bootstrap';
import { ItemDetail } from 'src/app/models/itemDetail.model';
import { ItemDetailService } from 'src/app/service/item-detail.service';
import { RoomDetail } from 'src/app/models/RoomDetail.model';
import { RoomDetailService } from 'src/app/service/room-detail.service';
import { Equirment } from 'src/app/models/equirment.model';
import { MyRoom, Room } from 'src/app/models/rooms.model';
import { FormControl, FormGroup, Validators } from '@angular/forms';

@Component({
  selector: 'app-pending',
  templateUrl: './pending.component.html',
  styleUrls: ['./pending.component.scss'],
  styles: [`
  .form-group.hidden {
    width: 0;
    margin: 0;
    border: none;
    padding: 0;
  }
  .custom-day {
    text-align: center;
    padding: 0.185rem 0.25rem;
    display: inline-block;
    height: 2rem;
    width: 2rem;
  }
  .custom-day.focused {
    background-color: #e6e6e6;
  }
  .custom-day.range, .custom-day:hover {
    background-color: rgb(2, 117, 216);
    color: white;
  }
  .custom-day.faded {
    background-color: rgba(2, 117, 216, 0.5);
  }
`]
})

export class PendingComponent implements OnInit {
  time = { hour: 13, minute: 30 };

  closeResult = '';

  listItemDetail : ItemDetail[] = [];
  listRoomDetail : RoomDetail[] = [];

  page = 1;
  pageSize = 10;
  collectionSize = 0;

  pageListRoom = 1;
  pageSizeListRoom = 10;
  collectionSizeListRoom = 0;

  modelEquirment = new Equirment();
  modelRoom = new MyRoom();
  modelItemDetail = new ItemDetail();
  modelRoomDetail = new RoomDetail();
  
  hoveredDate: NgbDate | null = null;

  fromDate: NgbDate | null;
  toDate: NgbDate | null;

  myFormRoom: FormGroup;
  myFormEquir: FormGroup;

  constructor(private calendar: NgbCalendar, public formatter: NgbDateParserFormatter, private modalService: NgbModal, private ItemDetailService: ItemDetailService, private RoomDetailService: RoomDetailService) {
    this.fromDate = calendar.getToday();
    this.toDate = calendar.getNext(calendar.getToday(), 'd', 10);
    this.refreshItemDetail();
  }

  refreshItemDetail() {
    this.listItemDetail = this.listItemDetail
      .map((item, i) => ({ id: i + 1, ...item }))
      .slice((this.page - 1) * this.pageSize, (this.page - 1) * this.pageSize + this.pageSize);
  }

  onDateSelection(date: NgbDate) {
    if (!this.fromDate && !this.toDate) {
      this.fromDate = date;
    } else if (this.fromDate && !this.toDate && date && date.after(this.fromDate)) {
      this.toDate = date;
    } else {
      this.toDate = null;
      this.fromDate = date;
    }
  }

  open(content) {
    this.modalService.open(content, { ariaLabelledBy: 'modal-basic-title' }).result.then((result) => {
      this.closeResult = `Closed with: ${result}`;
    }, (reason) => {
      this.closeResult = `Dismissed ${this.getDismissReason(reason)}`;
    });
  }
  date='10-12-2561'
  show(a:string){
    console.log(a)
  }
  sDate = ""
  eDate = ""
  openItemDetail(content : string ,item : ItemDetail) {
    this.modelItemDetail = item ;

   
    let sDate = this.modelItemDetail.sDate.split('/')
    this.sDate = sDate[0]+"-"+sDate[1]+"-"+sDate[2]
    let eDate = this.modelItemDetail.eDate.split('/')
    this.eDate = eDate[0]+"-"+eDate[1]+"-"+eDate[2]
    

    this.myFormEquir = new FormGroup({
      userNameForm: new FormControl(this.modelItemDetail.userName, [Validators.required]),
      eTelephone: new FormControl(this.modelItemDetail.eTelephone, [Validators.required]),
      email: new FormControl(this.modelItemDetail.email, [Validators.required, Validators.email]),
      eqName: new FormControl(this.modelItemDetail.equirments.eqName, [Validators.required]),
      eqDesc: new FormControl(this.modelItemDetail.equirments.eqDesc, [Validators.required]),
      eqType: new FormControl(this.modelItemDetail.equirments.eqType, [Validators.required]),
      sDate: new FormControl(this.modelItemDetail.sDate, [Validators.required]),
      eDate: new FormControl(this.modelItemDetail.eDate, [Validators.required]),
      sTime: new FormControl(this.modelItemDetail.sTime, [Validators.required]),
      eTime: new FormControl(this.modelItemDetail.eTime, [Validators.required]),
      Quantity: new FormControl(this.modelItemDetail.quantity, [Validators.required]),
      remark: new FormControl(this.modelItemDetail.remark),
      eStatus: new FormControl(this.modelItemDetail.eStatus)
    })
    this.modalService.open(content, { ariaLabelledBy: 'modal-basic-title' }).result.then((result) => {
      this.closeResult = `Closed with: ${result}`;
    }, (reason) => {
      this.closeResult = `Dismissed ${this.getDismissReason(reason)}`;
    });
  }

  openRoomDetail(content : string ,item : RoomDetail) {
    this.modelRoomDetail = item ;

    let sDate = this.modelRoomDetail.sDate.split('/')
    this.sDate = sDate[0]+"-"+sDate[1]+"-"+sDate[2]
    let eDate = this.modelRoomDetail.eDate.split('/')
    this.eDate = eDate[0]+"-"+eDate[1]+"-"+eDate[2]

    this.myFormRoom = new FormGroup({
      userNameForm: new FormControl(this.modelRoomDetail.userName, [Validators.required]),
      rTelephone: new FormControl(this.modelRoomDetail.rTelephone, [Validators.required]),
      email: new FormControl(this.modelRoomDetail.email, [Validators.required, Validators.email]),
      rName: new FormControl(this.modelRoomDetail.room.rName, [Validators.required]),
      rDesc: new FormControl(this.modelRoomDetail.room.rDesc, [Validators.required]),
      rType: new FormControl(this.modelRoomDetail.room.rType, [Validators.required]),
      sDate: new FormControl(this.modelRoomDetail.sDate, [Validators.required]),
      eDate: new FormControl(this.modelRoomDetail.eDate, [Validators.required]),
      sTime: new FormControl(this.modelRoomDetail.sTime, [Validators.required]),
      eTime: new FormControl(this.modelRoomDetail.eTime, [Validators.required]),
      remark: new FormControl(this.modelRoomDetail.remark),
      rStatus: new FormControl(this.modelRoomDetail.rStatus)
    });

    this.modalService.open(content, { ariaLabelledBy: 'modal-basic-title' }).result.then((result) => {
      this.closeResult = `Closed with: ${result}`;
    }, (reason) => {
      this.closeResult = `Dismissed ${this.getDismissReason(reason)}`;
    });
    console.log("date",this.modelRoomDetail)
  }

  rDate(item: string, item2: string){
    let Dates = item.split("-")
    let dates = Dates[0]+"/"+Dates[1]+"/"+Dates[2]
    
    if(item2=="sdate"){
      this.modelItemDetail.sDate = dates
    }
    if(item2=="edate"){
      this.modelItemDetail.eDate = dates
    }
  } 


  private getDismissReason(reason: any): string {
    if (reason === ModalDismissReasons.ESC) {
      return 'by pressing ESC';
    } else if (reason === ModalDismissReasons.BACKDROP_CLICK) {
      return 'by clicking on a backdrop';
    } else {
      return `with: ${reason}`;
    }
  }

  isHovered(date: NgbDate) {
    return this.fromDate && !this.toDate && this.hoveredDate && date.after(this.fromDate) && date.before(this.hoveredDate);
  }

  isInside(date: NgbDate) {
    return this.toDate && date.after(this.fromDate) && date.before(this.toDate);
  }

  isRange(date: NgbDate) {
    return date.equals(this.fromDate) || (this.toDate && date.equals(this.toDate)) || this.isInside(date) || this.isHovered(date);
  }

  validateInput(currentValue: NgbDate | null, input: string): NgbDate | null {
    const parsed = this.formatter.parse(input);
    return parsed && this.calendar.isValid(NgbDate.from(parsed)) ? NgbDate.from(parsed) : currentValue;
  }

  ngOnInit() {
    this.ItemDetailService.getListItemDetail().subscribe( result => {
      this.listItemDetail = result;
    });
    this.RoomDetailService.getListRoomDetail().subscribe( result => {
      this.listRoomDetail = result;
    });
    this.collectionSizeListRoom = this.listRoomDetail.length;
  }

}

export class NgbdDropdownBasic {
}
