<template>
  <div>
    <v-row>
      <v-col
        cols="12"
        sm="6"
        lg="4"
        xl="3"
        v-if="value.serial != 0 && canEditSerial"
      >
        <v-text-field
          v-model="value.serial"
          :readonly="formState.readOnly"
          :label="$ay.t('WorkOrderSerialNumber')"
          ref="serial"
          data-cy="serial"
          :rules="[
            form().integerValid(this, 'serial'),
            form().required(this, 'serial')
          ]"
          :error-messages="form().serverErrors(this, 'serial')"
          @input="fieldValueChanged('serial')"
        ></v-text-field>
      </v-col>
      <v-col cols="12" sm="6" lg="4" xl="3">
        <gz-pick-list
          :aya-type="$ay.ayt().Customer"
          :show-edit-icon="true"
          v-model="value.customerId"
          :readonly="formState.readOnly"
          :label="$ay.t('Customer')"
          :can-clear="false"
          ref="customerId"
          data-cy="customerId"
          :rules="[form().required(this, 'customerId')]"
          :error-messages="form().serverErrors(this, 'customerId')"
          @input="fieldValueChanged('customerId')"
        ></gz-pick-list>
      </v-col>
      <v-col cols="12" sm="6" lg="4" xl="3">
        <GzWoState
          v-if="pvm.subRights.states.visible"
          v-model="value"
          :form-key="formCustomTemplateKey"
          :readonly="formState.readOnly"
          :pvm="pvm"
          data-cy="woState"
          :all-states="pvm.selectLists.wostatus"
          :allowed-states="pvm.selectLists.allowedwostatus"
        />
      </v-col>

      <v-col cols="12" sm="6" lg="4" xl="3">
        <GzWoAddress
          v-model="value"
          :form-key="formCustomTemplateKey"
          :readonly="formState.readOnly"
          :pvm="pvm"
          data-cy="woAddress"
        />
      </v-col>

      <v-col v-if="form().showMe(this, 'Notes')" cols="12">
        <v-textarea
          v-model="value.notes"
          :readonly="formState.readOnly"
          :label="$ay.t('WorkOrderSummary')"
          :error-messages="form().serverErrors(this, 'notes')"
          ref="notes"
          data-cy="notes"
          @input="fieldValueChanged('notes')"
          auto-grow
        ></v-textarea>
      </v-col>
    </v-row>
  </div>
</template>
<script>
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*  XXXeslint-disable    */
////////////////////////////////////////////////////////////////////////////////////////////////////////////
import GzWoState from "./work-order-state.vue";
import GzWoAddress from "./work-order-address.vue";
export default {
  components: {
    GzWoState,
    GzWoAddress
  },
  data() {
    return {
      canEditSerial: window.$gz.role.hasRole([
        window.$gz.role.AUTHORIZATION_ROLES.BizAdminFull
      ])
    };
  },

  props: {
    value: {
      default: null,
      type: Object
    },
    pvm: {
      default: null,
      type: Object
    }
  },

  methods: {
    form() {
      return window.$gz.form;
    },
    async fieldValueChanged(ref) {
      if (!this.formState.loading && !this.formState.readonly) {
        //flag this record dirty so it gets picked up by save
        this.value.isDirty = true;
        window.$gz.form.fieldValueChanged(this.pvm, ref);

        if (ref == "customerId") {
          this.value.alertViz = null;
          const custId = this.value.customerId;
          if (custId != null) {
            //------ Alert notes
            let res = await window.$gz.api.get(`customer/alert/${custId}`);
            if (res.data) {
              this.value.alertViz = res.data;
            }
            //------ Addresses
            res = await window.$gz.api.get(`customer/address/${custId}`);
            if (res.data) {
              console.log("woheaderfldvalchng-address:", res.data);
            }
          }
        }
      }
    }
  },
  computed: {
    formState: function() {
      return this.pvm.formState;
    },
    formCustomTemplateKey: function() {
      return this.pvm.formCustomTemplateKey;
    }
  }
};

/*
Example workorder
{
    id: 10,
    concurrency: 7728489,
    serial: 10,
    notes: "Quae officia placeat aliquid ducimus consequatur quia.",
    wiki: null,
    customFields: null,
    tags: ["green", "zone6"],
    customerId: 12,
    projectId: null,
    internalReferenceNumber: "irf-3339",
    customerReferenceNumber: "crf-1889",
    customerContactName: "contact name here",
    fromQuoteId: null,
    fromPMId: null,
    fromCSRId: null,
    serviceDate: "2021-05-29T21:25:31.421011Z",
    completeByDate: "2021-06-03T21:25:31.421011Z",
    invoiceNumber: null,
    customerSignature: null,
    customerSignatureName: null,
    customerSignatureCaptured: "0001-01-01T00:00:00Z",
    postAddress: null,
    postCity: null,
    postRegion: null,
    postCountry: null,
    postCode: null,
    address: null,
    city: null,
    region: null,
    country: null,
    latitude: null,
    longitude: null,
    items: [
      {
        id: 21,
        concurrency: 7728489,
        notes: "itemnotes",
        wiki: null,
        customFields: null,
        tags: [],
        workOrderId: 10,
        techNotes: "technotes",
        workorderItemStatusId: null,
        workorderItemPriorityId: null,
        requestDate: "2021-05-29T21:25:31.421011Z",
        warrantyService: false,
        isDirty: false,
        expenses: [],
        labors: [],
        loans: [],
        parts: [],
        partRequests: [],
        scheduledUsers: [
          {
            id: 41,
            concurrency: 7728489,
            userId: 15,
            estimatedQuantity: 1.0,
            startDate: null,
            stopDate: null,
            serviceRateId: null,
            isDirty: false,
            workOrderItemId: 21
          },
          {
            id: 42,
            concurrency: 7728489,
            userId: 22,
            estimatedQuantity: 2.0,
            startDate: null,
            stopDate: null,
            serviceRateId: null,
            isDirty: false,
            workOrderItemId: 21
          }
        ],
        tasks: [],
        travels: [],
        units: [],
        outsideServices: []
      },
      {
        id: 22,
        concurrency: 7728489,
        notes: "itemnotes",
        wiki: null,
        customFields: null,
        tags: [],
        workOrderId: 10,
        techNotes: "technotes",
        workorderItemStatusId: null,
        workorderItemPriorityId: null,
        requestDate: "2021-05-29T21:25:31.421011Z",
        warrantyService: false,
        isDirty: false,
        expenses: [],
        labors: [],
        loans: [],
        parts: [],
        partRequests: [],
        scheduledUsers: [
          {
            id: 43,
            concurrency: 7728489,
            userId: 24,
            estimatedQuantity: 1.0,
            startDate: null,
            stopDate: null,
            serviceRateId: null,
            isDirty: false,
            workOrderItemId: 22
          },
          {
            id: 44,
            concurrency: 7728489,
            userId: 40,
            estimatedQuantity: 2.0,
            startDate: null,
            stopDate: null,
            serviceRateId: null,
            isDirty: false,
            workOrderItemId: 22
          }
        ],
        tasks: [],
        travels: [],
        units: [],
        outsideServices: []
      }
    ],
    states: [
      {
        id: 37,
        concurrency: 7728489,
        workOrderId: 10,
        workOrderStatusId: 2,
        created: "2021-05-29T21:30:31.421011Z",
        userId: 37,
        isDirty: false,
        workOrderStatus: null
      },
      {
        id: 38,
        concurrency: 7728489,
        workOrderId: 10,
        workOrderStatusId: 3,
        created: "2021-05-29T22:25:31.421011Z",
        userId: 10,
        isDirty: false,
        workOrderStatus: null
      },
      {
        id: 39,
        concurrency: 7728489,
        workOrderId: 10,
        workOrderStatusId: 1,
        created: "2021-05-29T22:30:31.421011Z",
        userId: 31,
        isDirty: false,
        workOrderStatus: null
      },
      {
        id: 40,
        concurrency: 7728489,
        workOrderId: 10,
        workOrderStatusId: 3,
        created: "2021-05-29T23:25:31.421011Z",
        userId: 2,
        isDirty: false,
        workOrderStatus: null
      },
      {
        id: 41,
        concurrency: 7728489,
        workOrderId: 10,
        workOrderStatusId: 9,
        created: "2021-04-06T00:10:44.636Z",
        userId: 1,
        isDirty: false,
        workOrderStatus: null
      }
    ],
    isDirty: false,
    isLockedAtServer: false
  };


*/
</script>
