import { Button, Flex } from "@mantine/core";
import { useState } from "react";
import createReport from 'docx-templates'

const xslTemplate = `<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <!-- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Шаблон >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -->
  <xsl:template match="/">
    <xsl:processing-instruction name="mso-application">
      <xsl:text>progid="Excel.Sheet"</xsl:text>
    </xsl:processing-instruction>
    <Workbook>
      <!-- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Стили шаблона >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -->
      <Styles>
        <Style ss:ID="Bordered1">
          <Borders>
            <Border ss:LineStyle="Continuous" ss:Position="Bottom" ss:Weight="1" />
            <Border ss:LineStyle="Continuous" ss:Position="Left" ss:Weight="1" />
            <Border ss:LineStyle="Continuous" ss:Position="Right" ss:Weight="1" />
            <Border ss:LineStyle="Continuous" ss:Position="Top" ss:Weight="1" />
          </Borders>
        </Style>
        <Style ss:ID="Bordered2">
          <Borders>
            <Border ss:LineStyle="Continuous" ss:Position="Bottom" ss:Weight="2" />
            <Border ss:LineStyle="Continuous" ss:Position="Left" ss:Weight="2" />
            <Border ss:LineStyle="Continuous" ss:Position="Right" ss:Weight="2" />
            <Border ss:LineStyle="Continuous" ss:Position="Top" ss:Weight="2" />
          </Borders>
        </Style>
        <Style ss:ID="Column" ss:Parent="Bordered2">
          <Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1" />
          <Font ss:Color="#000000" ss:FontName="Arial Cyr" x:CharSet="204" />
        </Style>
        <Style ss:ID="Cell1" ss:Parent="Bordered1">
          <Font ss:Bold="1" ss:Color="#000000" ss:FontName="Arial Cyr" x:CharSet="204" />
          <Interior ss:Color="#47FF19" ss:Pattern="Solid" />
        </Style>
        <Style ss:ID="Cell2" ss:Parent="Bordered1">
          <Font ss:Bold="1" ss:Color="#003366" ss:FontName="Arial Cyr" x:CharSet="204" />
          <Interior ss:Color="#F2FF02" ss:Pattern="Solid" />
        </Style>
        <Style ss:ID="Cell3" ss:Parent="Bordered1">
          <Font ss:Bold="1" ss:Color="#333333" ss:FontName="Arial Cyr" x:CharSet="204" />
          <Interior ss:Color="#C0C0C0" ss:Pattern="Solid" />
        </Style>
        <Style ss:ID="Cell4" ss:Parent="Bordered1">
          <Font ss:Color="#000000" ss:FontName="Arial Cyr" x:CharSet="204" />
        </Style>
        
        <Style ss:ID="CellReg" ss:Parent="Bordered1">
          <Font ss:Color="#003366" ss:FontName="Arial Cyr" x:CharSet="204" />
           
        </Style>
        <Style ss:ID="CellCity" ss:Parent="Bordered1">
          <Font ss:Color="#333333" ss:FontName="Arial Cyr" x:CharSet="204" />
           
        </Style>
      </Styles>
      <Worksheet ss:Name="Жилищний фонд">
        <Table>
          <Column ss:Width="100" />
          <Column ss:Width="100" />
          <Column ss:Width="100" />
          <Column ss:Width="150" />
          <Column ss:Width="50" />
          <Column ss:Width="50" />
          <Column ss:Width="50" />
          <Column ss:Width="50" />
          <Column ss:Width="70" />
          <Column ss:Width="70" />
          <Column ss:Width="70" />
          <Column ss:Width="70" />
          <Column ss:Width="70" />
          <Column ss:Width="70" />
          <Column ss:Width="70" />
          <Column ss:Width="70" />
          <Column ss:Width="80" />
          <!-- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Столбцы таблицы >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -->
          <Row>
            <Cell ss:MergeDown="1" ss:StyleID="Column">
              <Data ss:Type="String">Регион</Data>
            </Cell>
            <Cell ss:MergeDown="1" ss:StyleID="Column">
              <Data ss:Type="String">Нас. пункт</Data>
            </Cell>
            <Cell ss:MergeDown="1" ss:StyleID="Column">
              <Data ss:Type="String">Котельная</Data>
            </Cell>
            <Cell ss:MergeDown="1" ss:StyleID="Column">
              <Data ss:Type="String">Адрес</Data>
            </Cell>
            <Cell ss:MergeDown="1" ss:StyleID="Column">
              <Data ss:Type="String">Кол-во домов</Data>
            </Cell>
            <Cell ss:MergeDown="1" ss:StyleID="Column">
              <Data ss:Type="String">Этаж.</Data>
            </Cell>
            <Cell ss:MergeDown="1" ss:StyleID="Column">
              <Data ss:Type="String">Общая пл.</Data>
            </Cell>
            <Cell ss:MergeDown="1" ss:StyleID="Column">
              <Data ss:Type="String">Кол-во прожив.</Data>
            </Cell>
            <Cell ss:MergeAcross="1" ss:StyleID="Column">
              <Data ss:Type="String">Отопление</Data>
            </Cell>
            <Cell ss:MergeAcross="1" ss:StyleID="Column">
              <Data ss:Type="String">ГВС</Data>
            </Cell>
            <Cell ss:MergeAcross="1" ss:StyleID="Column">
              <Data ss:Type="String">ХВС</Data>
            </Cell>
            <Cell ss:MergeAcross="1" ss:StyleID="Column">
              <Data ss:Type="String">Канализация</Data>
            </Cell>
            <Cell ss:MergeDown="1" ss:StyleID="Column">
              <Data ss:Type="String">Сальдо исход.</Data>
            </Cell>
          </Row>
          <Row>
            <Cell ss:Index="9" ss:StyleID="Column">
              <Data ss:Type="String">Объем</Data>
            </Cell>
            <Cell ss:StyleID="Column">
              <Data ss:Type="String">Сумма</Data>
            </Cell>
            <Cell ss:StyleID="Column">
              <Data ss:Type="String">Объем</Data>
            </Cell>
            <Cell ss:StyleID="Column">
              <Data ss:Type="String">Сумма</Data>
            </Cell>
            <Cell ss:StyleID="Column">
              <Data ss:Type="String">Объем</Data>
            </Cell>
            <Cell ss:StyleID="Column">
              <Data ss:Type="String">Сумма</Data>
            </Cell>
            <Cell ss:StyleID="Column">
              <Data ss:Type="String">Объем</Data>
            </Cell>
            <Cell ss:StyleID="Column">
              <Data ss:Type="String">Сумма</Data>
            </Cell>
          </Row>
          <!-- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Данные таблицы >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -->
          <xsl:apply-templates select="//Kvp" />
        </Table>
        <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
          <FreezePanes />
          <FrozenNoSplit />
          <SplitHorizontal>2</SplitHorizontal>
          <TopRowBottomPane>2</TopRowBottomPane>
          <ActivePane>2</ActivePane>
        </WorksheetOptions>
      </Worksheet>
      <Worksheet ss:Name="Договорные подключения">
        <Table>
          <Column ss:Width="100" />
          <Column ss:Width="100" />
          <Column ss:Width="100" />
          <Column ss:Width="150" />
          <Column ss:Width="50" />
          <Column ss:Width="50" />
          <Column ss:Width="50" />
          <Column ss:Width="50" />
          <Column ss:Width="50" />
          <Column ss:Width="50" />
          <Column ss:Width="50" />
          <Column ss:Width="50" />
          <Column ss:Width="50" />
          <Column ss:Width="50" />
          <Column ss:Width="70" />
          <!-- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Столбцы таблицы >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -->
          <Row>
            <Cell ss:MergeDown="1" ss:StyleID="Column">
              <Data ss:Type="String">Регион</Data>
            </Cell>
            <Cell ss:MergeDown="1" ss:StyleID="Column">
              <Data ss:Type="String">Нас. пункт</Data>
            </Cell>
            <Cell ss:MergeDown="1" ss:StyleID="Column">
              <Data ss:Type="String">Котельная</Data>
            </Cell>
            <Cell ss:MergeDown="1" ss:StyleID="Column">
              <Data ss:Type="String">Наименование</Data>
            </Cell>
            <Cell ss:MergeDown="1" ss:StyleID="Column">
              <Data ss:Type="String">Кол-во объектов</Data>
            </Cell>
            <Cell ss:MergeDown="1" ss:StyleID="Column">
              <Data ss:Type="String">Объем здания</Data>
            </Cell>
            <Cell ss:MergeAcross="1" ss:StyleID="Column">
              <Data ss:Type="String">Отопление</Data>
            </Cell>
            <Cell ss:MergeAcross="1" ss:StyleID="Column">
              <Data ss:Type="String">Подогрев</Data>
            </Cell>
            <Cell ss:MergeAcross="1" ss:StyleID="Column">
              <Data ss:Type="String">ГВС</Data>
            </Cell>
            <Cell ss:MergeAcross="1" ss:StyleID="Column">
              <Data ss:Type="String">ХВС</Data>
            </Cell>
            <Cell ss:MergeAcross="1" ss:StyleID="Column">
              <Data ss:Type="String">Канализация</Data>
            </Cell>
            <Cell ss:MergeDown="1" ss:StyleID="Column">
              <Data ss:Type="String">Итого</Data>
            </Cell>
          </Row>
          <Row>
            <Cell ss:Index="7" ss:StyleID="Column">
              <Data ss:Type="String">Объем</Data>
            </Cell>
            <Cell ss:StyleID="Column">
              <Data ss:Type="String">Сумма</Data>
            </Cell>
            <Cell ss:StyleID="Column">
              <Data ss:Type="String">Объем</Data>
            </Cell>
            <Cell ss:StyleID="Column">
              <Data ss:Type="String">Сумма</Data>
            </Cell>
            <Cell ss:StyleID="Column">
              <Data ss:Type="String">Объем</Data>
            </Cell>
            <Cell ss:StyleID="Column">
              <Data ss:Type="String">Сумма</Data>
            </Cell>
            <Cell ss:StyleID="Column">
              <Data ss:Type="String">Объем</Data>
            </Cell>
            <Cell ss:StyleID="Column">
              <Data ss:Type="String">Сумма</Data>
            </Cell>
            <Cell ss:StyleID="Column">
              <Data ss:Type="String">Объем</Data>
            </Cell>
            <Cell ss:StyleID="Column">
              <Data ss:Type="String">Сумма</Data>
            </Cell>
          </Row>
          <!-- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Данные таблицы >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -->
          <xsl:apply-templates select="//Jur" />
        </Table>
      </Worksheet>
    </Workbook>
  </xsl:template>
  <!-- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Шаблон данных >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -->
  <xsl:template match="Kvp">
    <xsl:choose>
      <xsl:when test="style_id = 1">
        <!-- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Строка с улусом >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -->
        <Row>
          <Cell ss:MergeAcross="3" ss:StyleID="Cell1">
            <Data ss:Type="String">
              <xsl:value-of select="region" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="house_count" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="String" />
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="square" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="people_count" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="volume_heat" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="sum_heat" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="volume_hwater" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="sum_hwater" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="volume_cwater" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="sum_cwater" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="volume_sewers" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="sum_sewers" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="saldo_out" />
            </Data>
          </Cell>
        </Row>
      </xsl:when>
      <xsl:when test="style_id = 2">
        <!-- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Строка с населенным пунктом >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -->
        <Row>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="String">
              <xsl:value-of select="region" />
            </Data>
          </Cell>
          <Cell ss:Index="2" ss:MergeAcross="2" ss:StyleID="Cell2">
            <Data ss:Type="String">
              <xsl:value-of select="city" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="house_count" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="String" />
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="square" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="people_count" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="volume_heat" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="sum_heat" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="volume_hwater" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="sum_hwater" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="volume_cwater" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="sum_cwater" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="volume_sewers" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="sum_sewers" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="saldo_out" />
            </Data>
          </Cell>
        </Row>
      </xsl:when>
      <xsl:when test="style_id = 3">
        <!-- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Строка с котельной >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -->
        <Row>
        <Cell ss:StyleID="Cell3">
            <Data ss:Type="String">
              <xsl:value-of select="region" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="String">
              <xsl:value-of select="city" />
            </Data>
          </Cell>
          <Cell ss:Index="3" ss:MergeAcross="1" ss:StyleID="Cell3">
            <Data ss:Type="String">
              <xsl:value-of select="boiler" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="house_count" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="String" />
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="square" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="people_count" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="volume_heat" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="sum_heat" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="volume_hwater" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="sum_hwater" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="volume_cwater" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="sum_cwater" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="volume_sewers" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="sum_sewers" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="saldo_out" />
            </Data>
          </Cell>
        </Row>
      </xsl:when>
      <xsl:when test="style_id = 4">
        <!-- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Строка с объектами >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -->
        <Row>
        <Cell   ss:StyleID="CellReg">
            <Data ss:Type="String">
              <xsl:value-of select="region" />
            </Data>
          </Cell>
          <Cell ss:Index="2"  ss:StyleID="CellCity">
            <Data ss:Type="String">
              <xsl:value-of select="city" />
            </Data>
          </Cell>
          <Cell ss:Index="3"  ss:StyleID="Cell3">
            <Data ss:Type="String">
              <xsl:value-of select="boiler" />
            </Data>
          </Cell>
          <Cell ss:MergeAcross="1" ss:Index="4" ss:StyleID="Cell4">
            <Data ss:Type="String">
              <xsl:value-of select="address" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            <Data ss:Type="Number">
              <xsl:value-of select="floors" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            <Data ss:Type="Number">
              <xsl:value-of select="square" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            <Data ss:Type="Number">
              <xsl:value-of select="people_count" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            <Data ss:Type="Number">
              <xsl:value-of select="volume_heat" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            <Data ss:Type="Number">
              <xsl:value-of select="sum_heat" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            <Data ss:Type="Number">
              <xsl:value-of select="volume_hwater" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            <Data ss:Type="Number">
              <xsl:value-of select="sum_hwater" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            <Data ss:Type="Number">
              <xsl:value-of select="volume_cwater" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            <Data ss:Type="Number">
              <xsl:value-of select="sum_cwater" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            <Data ss:Type="Number">
              <xsl:value-of select="volume_sewers" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            <Data ss:Type="Number">
              <xsl:value-of select="sum_sewers" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            <Data ss:Type="Number">
              <xsl:value-of select="saldo_out" />
            </Data>
          </Cell>
        </Row>
      </xsl:when>
    </xsl:choose>
  </xsl:template>
  <xsl:template match="Jur">
    <xsl:choose>
      <xsl:when test="style_id = 1">
        <!-- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Строка с улусом >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -->
        <Row>
          <Cell ss:MergeAcross="3" ss:StyleID="Cell1">
            <Data ss:Type="String">
              <xsl:value-of select="reg" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="count" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="building_volume" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="heat_volume" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="heat_summa" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="gcal_ost" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="gcal_ost_summa" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="hw_vol" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="hw_summa" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="vol_xvs" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="sum_xvs" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="vol_kan" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="sum_kan" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell1">
            <Data ss:Type="Number">
              <xsl:value-of select="all_summa" />
            </Data>
          </Cell>
        </Row>
      </xsl:when>
      <xsl:when test="style_id = 2">
        <!-- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Строка с населенным пунктом >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -->
        <Row>
         <Cell ss:StyleID="Cell2">
            <Data ss:Type="String">
              <xsl:value-of select="reg" />
            </Data>
          </Cell>
          <Cell ss:Index="2" ss:MergeAcross="2" ss:StyleID="Cell2">
            <Data ss:Type="String">
              <xsl:value-of select="city" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="count" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="building_volume" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="heat_volume" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="heat_summa" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="gcal_ost" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="gcal_ost_summa" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="hw_vol" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="hw_summa" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="vol_xvs" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="sum_xvs" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="vol_kan" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="sum_kan" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell2">
            <Data ss:Type="Number">
              <xsl:value-of select="all_summa" />
            </Data>
          </Cell>
        </Row>
      </xsl:when>
      <xsl:when test="style_id = 3">
        <!-- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Строка с котельной >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -->
        <Row>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="String">
              <xsl:value-of select="reg" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="String">
              <xsl:value-of select="city" />
            </Data>
          </Cell>
          <Cell ss:Index="3" ss:MergeAcross="1" ss:StyleID="Cell3">
            <Data ss:Type="String">
              <xsl:value-of select="boiler" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="count" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="building_volume" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="heat_volume" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="heat_summa" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="gcal_ost" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="gcal_ost_summa" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="hw_vol" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="hw_summa" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="vol_xvs" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="sum_xvs" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="vol_kan" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="sum_kan" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell3">
            <Data ss:Type="Number">
              <xsl:value-of select="all_summa" />
            </Data>
          </Cell>
        </Row>
      </xsl:when>
      <xsl:when test="style_id = 4">
        <!-- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Строка с объектами >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -->
        <Row>
            <Cell   ss:StyleID="CellReg">
            <Data ss:Type="String">
              <xsl:value-of select="reg" />
            </Data>
          </Cell>
          <Cell ss:Index="2"  ss:StyleID="CellCity">
            <Data ss:Type="String">
              <xsl:value-of select="city" />
            </Data>
          </Cell>
          <Cell ss:Index="3"  ss:StyleID="Cell3">
            <Data ss:Type="String">
              <xsl:value-of select="boiler" />
            </Data>
          </Cell>
          <Cell ss:MergeAcross="1" ss:Index="4" ss:StyleID="Cell4">
            <Data ss:Type="String">
              <xsl:value-of select="name" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            <Data ss:Type="Number">
              <xsl:value-of select="building_volume" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            <Data ss:Type="Number">
              <xsl:value-of select="heat_volume" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            <Data ss:Type="Number">
              <xsl:value-of select="heat_summa" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            <Data ss:Type="Number">
              <xsl:value-of select="gcal_ost" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            <Data ss:Type="Number">
              <xsl:value-of select="gcal_ost_summa" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            <Data ss:Type="Number">
              <xsl:value-of select="hw_vol" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            <Data ss:Type="Number">
              <xsl:value-of select="hw_summa" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            <Data ss:Type="Number">
              <xsl:value-of select="vol_xvs" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            <Data ss:Type="Number">
              <xsl:value-of select="sum_xvs" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            <Data ss:Type="Number">
              <xsl:value-of select="vol_kan" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            
            <Data ss:Type="Number">
              <xsl:value-of select="sum_kan" />
            </Data>
          </Cell>
          <Cell ss:StyleID="Cell4">
            <Data ss:Type="Number">
              <xsl:value-of select="all_summa" />
            </Data>
          </Cell>
        </Row>
      </xsl:when>
    </xsl:choose>
  </xsl:template>
</xsl:stylesheet>`

const PrintReport = () => {
  const [loading, setLoading] = useState(false);

  const generateDocx = async () => {
    setLoading(true);

    try {
      // Fetch the DOCX template from the public folder
      const response = await fetch("/template.docx");
      const response_table = await fetch("/template_table.docx");
      const templateArrayBuffer = await response.arrayBuffer();
      const templateArrayBuffer_table = await response_table.arrayBuffer();

      // Convert ArrayBuffer to Uint8Array (Fix TypeScript error)
      const templateUint8Array = new Uint8Array(templateArrayBuffer);
      const templateUint8Array_table = new Uint8Array(templateArrayBuffer_table);

      // Fetch the image (Example: Load from public folder)
      const imageResponse = await fetch("/test.png"); // Change this to your image path
      const imageBlob = await imageResponse.blob();
      const imageArrayBuffer = await imageBlob.arrayBuffer();
      const imageUint8Array = new Uint8Array(imageArrayBuffer);

      // Generate the DOCX file with the replacement
      const report = await createReport({
        template: templateUint8Array, // Ensure it's Uint8Array
        data: {
          test: "Hello World",
          myImage: {
            width: 6, // Width in cm
            height: 6, // Height in cm
            data: imageUint8Array, // Image binary data
            extension: ".png", // Specify the image format
          },
        },
      });

      const report_table = await createReport({
        template: templateUint8Array_table, // Ensure it's Uint8Array
        data: {
          test: "Hello World",
          rows: [
            {
              first: 'A',
              second: 'B',
              third: 'C',
              fourth: 'D',
            },
            {
              first: 'E',
              second: 'F',
              third: 'G',
              fourth: 'H',
            },
            {
              first: 'I',
              second: 'J',
              third: 'K',
              fourth: 'L',
            }
          ]
        },
      });

      // Convert Uint8Array to a Blob
      const blob = new Blob([report], {
        type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
      });

      const blob_table = new Blob([report_table], {
        type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
      });

      // Create a download link and trigger the download
      const url = URL.createObjectURL(blob);
      const a = document.createElement("a");
      a.href = url;
      a.download = "report.docx";
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);

      // Create a download link and trigger the download
      const url_table = URL.createObjectURL(blob_table);
      const a_table = document.createElement("a");
      a_table.href = url_table;
      a_table.download = "report_table.docx";
      document.body.appendChild(a_table);
      a_table.click();
      document.body.removeChild(a_table);

      // Revoke the object URL after download
      URL.revokeObjectURL(url);
      URL.revokeObjectURL(url_table);
    } catch (error) {
      console.error("Error generating DOCX:", error);
    } finally {
      setLoading(false);
    }
  }

  const handleGenerateExcel = () => {
    // Define the example XML data
    const xmlData = `
          <root>
            <Kvp>
              <style_id>1</style_id>
              <region>Region 1</region>
              <city>City 1</city>
              <house_count>10</house_count>
              <square>1000</square>
              <people_count>500</people_count>
              <volume_heat>200</volume_heat>
              <sum_heat>1000</sum_heat>
              <volume_hwater>300</volume_hwater>
              <sum_hwater>1500</sum_hwater>
              <volume_cwater>400</volume_cwater>
              <sum_cwater>2000</sum_cwater>
              <volume_sewers>500</volume_sewers>
              <sum_sewers>2500</sum_sewers>
              <saldo_out>300</saldo_out>
            </Kvp>
          </root>
        `;

    // Parse the XSL template and XML data
    const parser = new DOMParser();
    const xslDoc = parser.parseFromString(xslTemplate, "application/xml");
    const xmlDoc = parser.parseFromString(xmlData, "application/xml");

    // Apply the transformation
    const xsltProcessor = new XSLTProcessor();
    xsltProcessor.importStylesheet(xslDoc);
    const resultDocument = xsltProcessor.transformToDocument(xmlDoc);

    // Serialize the result to a string
    const serializer = new XMLSerializer();
    const resultXml = serializer.serializeToString(resultDocument);

    // Add missing Excel-specific headers if needed
    const correctedXml = `<?xml version="1.0" encoding="utf-8"?>\n` + resultXml

    // Convert to Blob and trigger download
    const blob = new Blob([correctedXml], { type: "application/vnd.ms-excel" });
    const url = URL.createObjectURL(blob);
    const link = document.createElement("a");
    link.href = url;
    link.download = "template.xls";
    link.click();

    // Clean up
    URL.revokeObjectURL(url);
  }

  return (
    <Flex p='sm' gap='sm'>
      <Button onClick={generateDocx} disabled={loading}>{loading ? "Генерация отчета..." : "Сохранить в docx"}</Button>
      <Button onClick={handleGenerateExcel}>Сохранить в Excel</Button>
    </Flex>
  )
}

export default PrintReport