<template>
    <div class="item-columns-edit">
        <i class="fas fa-pencil-alt"></i>&nbsp;
        <button 
            type="button"
            class="btn-aka-link"
            @click="onEditItemColumns">
            Edit columns
        </button>

        <component v-bind:is="edit_html" @submit="onSubmit" @cancel="onCancel"></component>
    </div>
</template>

<script>
import Vue from 'vue';

import AkauntingModalAddNew from './AkauntingModalAddNew';

import Form from './../plugins/form';

export default {
  name: 'akaunting-edit-item-columns',

    components: {
        AkauntingModalAddNew,
    },

  props: {
    placeholder: {
      type: String,
      default: 'Type an item name',
      description: 'Input placeholder'
    },
    type: {
      type: String,
      default: 'sale',
      description: 'Show item price'
    },
    editColumn: {
        type: Object,
        default: function () {
            return {
                text: 'Add New Item',
                status: false,
                new_text: 'New',
                buttons: {}
            };
        },
        description: "Selectbox Add New Item Feature"
    },
  },

  data() {
    return {
      form: {},
      edit_column: {
          text: this.editColumn.text,
          show: false,
          buttons: this.editColumn.buttons,
      },
      edit_html: '',
    };
  },

  methods: {
    onEditItemColumns() {
      let edit_column = this.edit_column;

      window.axios.get(url + '/modals/invoices/item-columns/edit')
      .then(response => {
          edit_column.show = true;
          edit_column.html = response.data.html;

          this.edit_html = Vue.component('add-new-component', function (resolve, reject) {
              resolve({
                  template: '<div><akaunting-modal-add-new :show="edit_column.show" @submit="onSubmit" @cancel="onCancel" :buttons="edit_column.buttons" :title="edit_column.text" :is_component=true :message="edit_column.html"></akaunting-modal-add-new></div>',

                  components: {
                    AkauntingModalAddNew,
                  },

                  data: function () {
                      return {
                          edit_column: edit_column,
                      }
                  },

                  methods: {
                      onSubmit(event) {
                          this.$emit('submit', event);
                      },

                      onCancel(event) {
                          this.$emit('cancel', event);
                      }
                  }
              })
          });
      })
      .catch(e => {
          console.log(e);
      })
      .finally(function () {
          // always executed
      });
    },

    onSubmit(event) {
        this.form = event;

        this.loading = true;

        let data = this.form.data();

        FormData.prototype.appendRecursive = function(data, wrapper = null) {
            for(var name in data) {
                if (wrapper) {
                    if ((typeof data[name] == 'object' || data[name].constructor === Array) && ((data[name] instanceof File != true ) && (data[name] instanceof Blob != true))) {
                        this.appendRecursive(data[name], wrapper + '[' + name + ']');
                    } else {
                        this.append(wrapper + '[' + name + ']', data[name]);
                    }
                } else {
                    if ((typeof data[name] == 'object' || data[name].constructor === Array) && ((data[name] instanceof File != true ) && (data[name] instanceof Blob != true))) {
                        this.appendRecursive(data[name], name);
                    } else {
                        this.append(name, data[name]);
                    }
                }
            }
        };

        let form_data = new FormData();
        form_data.appendRecursive(data);

        window.axios({
            method: this.form.method,
            url: this.form.action,
            data: form_data,
            headers: {
                'X-CSRF-TOKEN': window.Laravel.csrfToken,
                'X-Requested-With': 'XMLHttpRequest',
                'Content-Type': 'multipart/form-data'
            }
        })
        .then(response => {
            this.form.loading = false;

            if (response.data.success) {
                let contact = response.data.data;

                this.contact_list.push({
                    key: contact.id,
                    value: (contact.title) ? contact.title : (contact.display_name) ? contact.display_name : contact.name,
                    type: (contact.type) ? contact.type : 'customer',
                    id: contact.id,
                    name: (contact.title) ? contact.title : (contact.display_name) ? contact.display_name : contact.name,
                    address: (contact.address) ? contact.address : '' 
                });

                this.edit_column.show = false;

                this.edit_column.html = '';
                this.edit_html = null;

                this.$emit('new', contact);

                let documentClasses = document.body.classList;

                documentClasses.remove("modal-open");
            }
        })
        .catch(error => {
            this.form.loading = false;

            this.form.onFail(error);

            this.method_show_html = error.message;
        });
    },

    onCancel() {
        this.edit_column.show = false;
        this.edit_column.html = null;
        this.edit_html = null;

        let documentClasses = document.body.classList;

        documentClasses.remove("modal-open");
    },
  },
};
</script>