<template>
    <div v-if="deal && deal.id" class="dealAddContract">
      <div class="modal-content">
        <div class="mb-4 mt-4 add-contract-title">
          <label class="mb-2">Бланк документа:</label>
          <Select
              v-model="selectedInnerBlankId"
              :options="innerBlanksList"
              optionLabel="name"
              optionValue="id"
              class="w-full"
              :key="innerBlanksList.length"
          >
          </Select>
        </div>

        <div class="mb-4 add-contract-title">
          <label class="mb-2">Комментарий:</label>
          <Textarea
              v-model="commentDealInnerBlank"
              placeholder="Введите комментарий"
              class="w-full"
              rows="8"
              cols="30"
              style="height: auto"
          />
        </div>

        <button @click="saveDealInnerDoc" class="mt-4 p-2 rounded w-full add-deal-contract-button">
          Составить договор
        </button>

      </div>
    </div>
</template>

<script setup>
import {inject, onMounted, ref} from 'vue';
import { useLaravelApi } from '@/composables/useLaravelApi';
import Textarea from "primevue/textarea";
import Select from 'primevue/select';

const dialogRef = inject('dialogRef');
const deal = dialogRef.value?.data?.deal || {}

// Состояния формы
const selectedInnerBlankId = ref(null);
const commentDealInnerBlank = ref('');
const isLoading = ref(false);
const validationErrors = ref({});

//Договора
const { data: innerBlanksData, error: innerBlanksError, fetchData: fetchInnerBlanksData } = useLaravelApi();
const innerBlanksList = ref([]);

console.log('[InnerDocAddModal] refs и useLaravelApi созданы');

onMounted(async () => {
  // Загружаем список бланков
  try {
    await fetchInnerBlanksData('/inner-blanks');
    if (innerBlanksData.value && innerBlanksData.value.success) {
      innerBlanksList.value = innerBlanksData.value.data;
      console.log('[InnerDocAddModal] Inner blanks list установлен:', innerBlanksList.value);
    } else {
      console.error('[InnerDocAddModal] Ошибка при загрузке списка бланков:', innerBlanksError.value);
    }
  } catch (err) {
    console.error('[InnerDocAddModal] Исключение при загрузке бланков:', err);
  }
});

const getTemplateData = () => {

  if (!deal) {
    console.warn('deal is undefined in getTemplateData');
    return { sobstv: [], clients: [], object_id: null };
  }

  const sidesMap = {
    'Продавец': 'sobstv',
    'Арендодатель': 'sobstv',
    'Застройщик': 'sobstv',
    'Покупатель': 'clients',
    'Арендатор': 'clients',
  };

  const result = {
    sobstv: [],
    clients: [],
    object_id: null,
  };

  // Обработка стороны 1
  if (deal.side_one) {
    const roleType = sidesMap[deal.side_one];
    if (roleType) {
      // Основной клиент
      if (deal.side_one_client_main) {
        result[roleType].push(deal.side_one_client_main.id);
      }
      // Дополнительные клиенты
      if (deal.side_one_clients?.length) {
        result[roleType].push(...deal.side_one_clients.map(c => c.id));
      }
    }
  }

  // Обработка стороны 2
  if (deal.side_two) {
    const roleType = sidesMap[deal.side_two];
    if (roleType) {
      // Основной клиент
      if (deal.side_two_client_main) {
        result[roleType].push(deal.side_two_client_main.id);
      }
      // Дополнительные клиенты
      if (deal.side_two_clients?.length) {
        result[roleType].push(...deal.side_two_clients.map(c => c.id));
      }
      //result[roleType].push(...deal.side_two_clients.map(c => c.id));
    }
  }

  // Объект может быть только один — либо из side_one, либо из side_two
  if (deal.side_one_object_id) {
    result.object_id = deal.side_one_object_id;
  } else if (deal.side_two_object_id) {
    result.object_id = deal.side_two_object_id;
  }

  return result;
};

const saveDealInnerDoc = async () => {
  validationErrors.value = {};
  isLoading.value = true;

  try {
    const { fetchData } = useLaravelApi();

    const dealId = deal.id ? Number(deal.id) : null;

    const templateData = getTemplateData();

    const payload = {
      template_data: {
        ...templateData,
        blank_id: selectedInnerBlankId.value,
        side_one_requisition_id: deal.side_one_requisition_id,
      },
      deal_id: dealId,
      comment: commentDealInnerBlank.value || '',
      side_one: [
        // Основной клиент стороны 1
        (deal.side_one_client_main ? {
          client_id: deal.side_one_client_main.id,
          role: deal.side_one
        } : null),
        // Дополнительные клиенты стороны 1
        ...(deal.side_one_clients?.map(client => ({
          client_id: client.id,
          role: deal.side_one
        })) || [])
      ].filter(Boolean),
      side_two: [
        // Основной клиент стороны 2
        (deal.side_two_client_main ? {
          client_id: deal.side_two_client_main.id,
          role: deal.side_two
        } : null),
        // Дополнительные клиенты стороны 2
        ...(deal.side_two_clients?.map(client => ({
          client_id: client.id,
          role: deal.side_two
        })) || [])
      ].filter(Boolean),
    };

    console.log('Full payload:', payload);

      const response = await fetchData('/deals/inner-docs', {
      method: 'POST',
      data: payload,
    });

    if (response.data.success) {
      console.log('[InnerDocAddModal] Doc сохранен:', response.data.data);
      dialogRef.value.close(response.data.data);
    } else {
      // Обработка ошибок валидации
      if (response.data.errors) {
        validationErrors.value = response.data.errors;
      }
      throw new Error(response.data.message || 'Ошибка при создании документа');
    }
  } catch (error) {
    console.error('Ошибка:', error);
    if (!validationErrors.value) {
      alert(error.message || 'Произошла ошибка при создании документа');
    }
  } finally {
    isLoading.value = false;
  }
};

</script>

<style scoped>
.dealAddContract {
  .modal-content {
    padding: 0;
    background: transparent;
    border: none;
    box-shadow: none;
  }

  .add-deal-contract-button {
    background: linear-gradient(180deg, #429F46 0%, #388E3C 100%), #FFFFFF;
    border-radius: 3px;
    color: #FFFFFF;
    padding: 12px 20px;
    font-family: 'Lato', sans-serif;
    font-style: normal;
    font-weight: 500;
    font-size: 16px;
    border: none;
    cursor: pointer;
    transition: opacity 0.2s;

    &:hover {
      opacity: 0.9;
    }
  }
}
</style>
