/**
 * Created by PPMaj on 11/24/2016.
 */
'use strict'

angular.module('RECRUIT').controller('Appointment', function ($scope, $mdDialog, RecService, $filter, SwapLang) {
  $scope.addMonth = function () {
    $scope.filterMonth.setMonth($scope.filterMonth.getMonth() + 1)
  }
  $scope.subMonth = function () {
    $scope.filterMonth.setMonth($scope.filterMonth.getMonth() - 1)
  }
  $scope.lang = getLang();
  $scope.initAppointment = function () {
    RecService.RestMappointment.getQuery().$promise.then(function (data) {
      $scope.appointments = data.result
      console.log(data.result)
    })
  }
  $scope.getJobDesc = function (jobid) {
    let result = ''
    let job = $filter('filter')($scope.jobs, {jobid: jobid}, true)
    if (job.length > 0) {
      result = job[0][`jobdesc_${$scope.lang}`]
    }
    return result
  }
  $scope.getPrefix = function (prefixid) {
    let result = ''
    let prefix = $filter('filter')($scope.prefixs, {mprefixid: prefixid}, true)
    if (prefix.length > 0) {
      result = prefix[0][`prefix_${$scope.lang}`]
    }
    return result
  }
  $scope.dateGroupStatus = function (dateString) {
    let date = new Date(dateString).setHours(0, 0, 0, 0)
    let today = new Date().setHours(0, 0, 0, 0)
    return {
      'appointment-dateGroup-past': date < today,
      'appointment-dateGroup-present': date === today,
      'appointment-dateGroup-future': date > today
    }
  }
  $scope.collapseStatus = function (dateString) {
    let date = new Date(dateString).setHours(0, 0, 0, 0)
    let today = new Date().setHours(0, 0, 0, 0)
    return {
      'collapse': date !== today,
      'collapse in': date === today
    }
  }
  let indexDate = [];
  $scope.appointmentsToFilter = function () {
    indexDate = [];
    return $scope.appointments;
  }
  $scope.removeObject = (p_appointment) => {
    $scope.appointments.splice($scope.appointments.indexOf(p_appointment), 1)
  }
  $scope.delete = ($appointment) => {
    SwapLang.getConfirm(1).then(function () {
      let model = {
        appointmentid: $appointment.appointmentid,
        candidateid: $appointment.candidateid,
        requestid:  $appointment.requestid
      }
      RecService.RestMappointment.delete(model).$promise.then(() => {
        SwapLang.getAlert(18).then(function () {
          $scope.removeObject($appointment)
        })
      }, (error) => {
        SwapLang.getAlert(17, error.data.result)
      })
    })


  }


  $scope.filterAppointmentDate = function (appointment) {
    let dateIsNew = indexDate.indexOf(appointment.detail.date) === -1;
    let appointmentDate = new Date(appointment.detail.date)
    let filterYearMonth = new Date(appointmentDate.getYear(), appointmentDate.getMonth(), 1).setHours(0, 0, 0, 0)
    let appointmentYearMonth = new Date($scope.filterMonth.getYear(), $scope.filterMonth.getMonth(), 1).setHours(0, 0, 0, 0)
    let isMatch = filterYearMonth === appointmentYearMonth
    if (dateIsNew) {
      indexDate.push(appointment.detail.date);
    }
    return dateIsNew && isMatch;
  }
  $scope.appointmentApplicant = function (event, candidate) {
    $mdDialog.show({
      controller: $scope.DialogController,
      templateUrl: 'DIALOGTEMPLATE/APPOINTMENT.TMPL.html',
      parent: angular.element(document.body),
      targetEvent: event,
      clickOutsideToClose: true,
      locals: {
        emailTemplates: $scope.emailTemplates,
        candidate: candidate,
        prefixs: $scope.prefixs
      }
    }).then(function () {
      $scope.initAppointment()
    })
  };
  $scope.DialogController = function ($scope, $mdDialog, emailTemplates, candidate, prefixs) {
    $scope.committees = []
    $scope.appointment = {
      appointmentid: '0',
      candidateid: candidate.candidateid,
      requestid: '',
      detail: {
        type: '',
        date: '',
        time: {
          start: '',
          end: ''
        },
        address: '',
        remark: '',
        sendMail: {
          status: '0',
          candidate: [],
          referee: []
        }
      }
    }
    $scope.swaplang = new swaplang();
    $scope.tabNames = {
      all: $scope.swaplang.swap2String('SW008544'),
      candi: $scope.swaplang.swap2String('SW000139'),
      commi: $scope.swaplang.swap2String('SW004819')
    }
    $scope.prefixs = prefixs
    $scope.lang = getLang();
    $scope.candidateEmailLang = getLang()
    $scope.refereeEmailLang = getLang()
    $scope.candidate = candidate
    $scope.emailTemplates = emailTemplates
    $scope.appointmentType = [
      {
        id: '1',
        desc: {
          tha: 'สอบสัมภาษณ์',
          eng: 'Interview'
        }
      },
      {
        id: '2',
        desc: {
          tha: 'สอบข้อเขียน',
          eng: 'Examination'
        }
      }
    ]
    RecService.ManageRequestForm.getOpeningMrequest({jobid: candidate.jobid}).$promise.then((data) => {
      $scope.appointment.requestid = data.requestid
        RecService.RestMrequest.query({funcname: 'getCommittee', params: data.requestid}).$promise.then(function (data) {
        $scope.committees = data.committee
          console.log($scope.committees )
      })
    })
    $scope.getAllRefereeEmail = function () {
      let email = ''
      $scope.committees.forEach((ref) => {
        email += `${ref.email},`
      })
      return email.substring(0, email.length - 1)
    }
    $scope.hide = function () {
      $mdDialog.hide();
    };
    $scope.cancel = function () {
      $mdDialog.cancel();
  };
    $scope.save = function () {
      if ($scope.formAppointment.$invalid) {
        return alert(MyCode[0])
      }
      let objSendMail = $scope.appointment.detail.sendMail
      objSendMail.allMail = objSendMail.candidate.concat(objSendMail.referee)
      objSendMail.allMail.forEach((mail) => {
        mail.content = `<pre>${mail.content}</pre>`
      })
      RecService.RestMappointment.save($scope.appointment).$promise.then(function () {
        SwapLang.getAlert(18)
      })
    };
    $scope.bindEmailVar = function (mailContent, lang, index) {
      let newMailContent = mailContent

      function getCommiPrefix() {
        let result = ''
        if (index === -1) {
          let allPrefix = ''
          $scope.committees.forEach((com) => {
            allPrefix += `${findObjWithAttr($scope.prefixs, 'mprefixid', com.prefixid)[`prefix_${lang}`]}, `
          })
          result = allPrefix.substring(0, allPrefix.length - 2)
        }
        else {
          result = findObjWithAttr($scope.prefixs, 'mprefixid', $scope.committees[index].prefixid)[`prefix_${lang}`]
        }
        return result
      }

      function getCommiFname() {
        let result = ''
        if (index === -1) {
          let allFname = ''
          $scope.committees.forEach((com) => {
            allFname += `${com.fname[lang]}, `
          })
          result = allFname.substring(0, allFname.length - 2)
        }
        else {
          result = $scope.committees[index].fname[lang]
        }
        return result
      }

      function getCommiLname() {
        let result = ''
        if (index === -1) {
          let allLname = ''
          $scope.committees.forEach((com) => {
            allLname += `${com.lname[lang]}, `
          })
          result = allLname.substring(0, allLname.length - 2)
        }
        else {
          result = $scope.committees[index].lname[lang]
        }
        return result
      }

      function getCommiFullname(pre, fname, lname) {
        let result = ''
        let arrPre = pre.split(', ')
        let arrFname = fname.split(', ')
        let arrLname = lname.split(', ')
        if (index === -1) {
          let allFullname = ''
          arrPre.forEach((com, index) => {
            allFullname += `${arrPre[index]}${arrFname[index]}  ${arrLname[index]}, `
          })
          result = allFullname.substring(0, allFullname.length - 2)
        }
        else {
          result = `${arrPre[index]}${arrFname[index]}  ${arrLname[index]}`
        }
        return result
      }

      function getCommiPreFname(pre, fname) {
        let result = ''
        let arrPre = pre.split(', ')
        let arrFname = fname.split(', ')
        if (index === -1) {
          let allString = ''
          arrPre.forEach((com, index) => {
            allString += `${arrPre[index]}  ${arrFname[index]}, `
          })
          result = allString.substring(0, allString.length - 2)
        }
        else {
          result = `${arrPre[index]}  ${arrFname[index]}`
        }
        return result
      }

      function getCommiPreLname(pre, lname) {
        let result = ''
        let arrPre = pre.split(', ')
        let arrLname = lname.split(', ')
        if (index === -1) {
          let allString = ''
          arrPre.forEach((com, index) => {
            allString += `${arrPre[index]}  ${arrLname[index]}, `
          })
          result = allString.substring(0, allString.length - 2)
        }
        else {
          result = `${arrPre[index]}  ${arrLname[index]}`
        }
        return result
      }

      function getCommiFnameLname(fname, lname) {
        let result = ''
        let arrFname = fname.split(', ')
        let arrLname = lname.split(', ')
        if (index === -1) {
          let allFullname = ''
          arrFname.forEach((com, index) => {
            allFullname += `${arrFname[index]}  ${arrLname[index]}, `
          })
          result = allFullname.substring(0, allFullname.length - 2)
        }
        else {
          result = `${arrFname[index]}  ${arrLname[index]}`
        }
        return result
      }

      let candi = {
        prefix: findObjWithAttr($scope.prefixs, 'mprefixid', $scope.candidate.personal.prefixid)[`prefix_${lang}`],
        fname: $scope.candidate.personal.fname[lang],
        lname: $scope.candidate.personal.lname[lang],
      }
      let commi = {
        prefix: getCommiPrefix(),
        fname: getCommiFname(),
        lname: getCommiLname(),
      }
      let key = {
        candi: {
          id: '${CID}',
          prefix: '${CPREFIX}',
          fname: '${CFNAME}',
          lname: '${CLNAME}',
          preFname: '${CPREFIX+CFNAME}',
          preLname: '${CPREFIX+CLNAME}',
          fnameLname: '${CFNAME+CLNAME}',
          fullname: '${CFULLNAME}',
        },
        commi: {
          prefix: '${CMPREFIX}',
          fname: '${CMFNAME}',
          lname: '${CMLNAME}',
          preFname: '${CMPREFIX+CMFNAME}',
          preLname: '${CMPREFIX+CMLNAME}',
          fnameLname: '${CMFNAME+CMLNAME}',
          fullname: '${CMFULLNAME}'
        }

      }
      let valCandi = {
        id: $scope.candidate.applicantid,
        prefix: candi.prefix,
        fname: candi.fname,
        lname: candi.lname,
        preFname: `${candi.prefix}  ${candi.fname}`,
        preLname: `${candi.prefix}  ${candi.lname}`,
        FnameLname: `${candi.fname}  ${candi.lname}`,
        fullname: `${candi.prefix}${candi.fname}  ${candi.lname}`
      }
      let valCommi = {
        prefix: commi.prefix,
        fname: commi.fname,
        lname: commi.lname,
        preFname: getCommiPreFname(commi.prefix, commi.fname),
        preLname: getCommiPreLname(commi.prefix, commi.lname),
        FnameLname: getCommiFnameLname(commi.fname, commi.lname),
        fullname: getCommiFullname(commi.prefix, commi.fname, commi.lname)
      }
      let keyArr = []
      let cutOpen = mailContent.split('${')
      for (let i = 0; i < cutOpen.length; i++) {
        let cutEnd = cutOpen[i].split('}')
        keyArr.push(cutEnd[0])
      }
      keyArr.forEach((strKey) => {
        let variable = '${' + strKey + '}'
        switch (variable) {
          case key.candi.id :
            newMailContent = newMailContent.replace(key.candi.id, valCandi.id)
            break
          case key.candi.prefix :
            newMailContent = newMailContent.replace(key.candi.prefix, valCandi.prefix)
            break
          case key.candi.fname :
            newMailContent = newMailContent.replace(key.candi.fname, valCandi.fname)
            break
          case key.candi.lname :
            newMailContent = newMailContent.replace(key.candi.lname, valCandi.lname)
            break
          case key.candi.preFname :
            newMailContent = newMailContent.replace(key.candi.preFname, valCandi.preFname)
            break
          case key.candi.preLname :
            newMailContent = newMailContent.replace(key.candi.preLname, valCandi.preLname)
            break
          case key.candi.fnameLname :
            newMailContent = newMailContent.replace(key.candi.fnameLname, valCandi.FnameLname)
            break
          case key.candi.fullname :
            newMailContent = newMailContent.replace(key.candi.fullname, valCandi.fullname)
            break
          case key.commi.prefix :
            newMailContent = newMailContent.replace(key.commi.prefix, valCommi.prefix)
            break
          case key.commi.fname :
            newMailContent = newMailContent.replace(key.commi.fname, valCommi.fname)
            break
          case key.commi.lname :
            newMailContent = newMailContent.replace(key.commi.lname, valCommi.lname)
            break
          case key.commi.preFname :
            newMailContent = newMailContent.replace(key.commi.preFname, valCommi.preFname)
            break
          case key.commi.preLname :
            newMailContent = newMailContent.replace(key.commi.preLname, valCommi.preLname)
            break
          case key.commi.fnameLname :
            newMailContent = newMailContent.replace(key.commi.fnameLname, valCommi.FnameLname)
            break
          case key.commi.fullname :
            newMailContent = newMailContent.replace(key.commi.fullname, valCommi.fullname)
            break
        }
      })

      return newMailContent
    }
    $scope.isChooseTemplate = {
      candidate: [],
      referee: []
    }
    $scope.chooseTemplate = function (who, index) {
      switch (who.toUpperCase()) {
        case 'CANDIDATE' :
          $scope.isChooseTemplate.candidate[index] = !$scope.isChooseTemplate.candidate[index]
          break;
        case 'REFEREE' :
          $scope.isChooseTemplate.referee[index] = !$scope.isChooseTemplate.referee[index]
          break;
      }
    }

    $scope.hours = function () {
      let hours = []
      for (let i = 0; i < 24; i++) {
        let hour = i.toString().paddingLeft("00")
        for (let j = 0; j < 60; j += 10) {
          hours.push(hour + '.' + j.toString().paddingLeft("00"))
        }
      }
      return hours
    }
    $scope.endHours = function () {
      let endHours = []
      let splitTime = $scope.appointment.detail.time.start.split('.')
      let startHour = parseInt(splitTime[0])
      let startmin = parseInt(splitTime[1])
      for (let i = startHour; i < 24; i++) {
        let hour = i.toString().paddingLeft("00")
        if (i == startHour) {
          let j
          for (j = startmin += 10; j < 60; j += 10) {
            endHours.push(hour + '.' + j.toString().paddingLeft("00"))
          }
        }
        else {
          for (let j = 0; j < 60; j += 10) {
            endHours.push(hour + '.' + j.toString().paddingLeft("00"))
          }
        }
      }
      return endHours
    }
    String.prototype.paddingLeft = function (paddingValue) {
      return String(paddingValue + this).slice(-paddingValue.length);
    };
  }
  // End function zone

  $scope.appointmentType = [
    {
      id: '1',
      desc: {
        tha: 'สอบสัมภาษณ์',
        eng: 'Interview'
      }
    },
    {
      id: '2',
      desc: {
        tha: 'สอบข้อเขียน',
        eng: 'Examination'
      }
    }
  ]

  $scope.filterMonth = new Date()
  $scope.prefixs = []
  $scope.jobs = []
  $scope.appointments = []
  $scope.initAppointment()
  $scope.candidates = []

  RecService.RestMcandidate.getQuery().$promise.then(function (data) {
    $scope.candidates = data.result
  })
  RecService.ManageConfig.query({cname: 'EMAIL'}).$promise.then(function (data) {
    $scope.emailTemplates = data.result.object.email
  })
  RecService.PrefixController.query().$promise.then(function (data) {
    $scope.prefixs = data.prefix
  })
  RecService.JobController.query({jobid: '0'}).$promise.then(function (data) {
    $scope.jobs = data.job
  })

  $('body').on('focus', '.datepicker', function () {
    let datepickerOptions = {
      yearRange: "c:c+15",
      dateFormat: "yy-mm-dd",
      changeMonth: true,
      changeYear: true,
      showAnim: 'clip',
      required: true,
      minDate: 0
    };
    $(this).datepicker(datepickerOptions)
      .on('keydown', function (e) {
        e.preventDefault();
      });

  });


})