<!DOCTYPE html>
<html th:lang="${#locale.language}" th:lang-direction="#{language.direction}" th:language="${#locale.toString()}" xmlns:th="http://www.thymeleaf.org">
  <head>
  <th:block th:insert="~{fragments/common :: head(title=#{crop.title}, header=#{crop.header})}"></th:block>
  </head>

  <body>
    <div id="page-container">
      <div id="content-wrap">
        <th:block th:insert="~{fragments/navbar.html :: navbar}"></th:block>
        <br /><br />
        <div class="container">
          <div class="row justify-content-center">
            <div class="col-md-6">
              <h2 th:text="#{crop.header}"></h2>
              <form id="cropForm" action="/api/v1/general/crop" method="post" enctype="multipart/form-data">
                <div th:replace="~{fragments/common :: fileSelector(name='fileInput', multiple=false, accept='application/pdf')}"></div>
                <input id="x" type="hidden" name="x">
                <input id="y" type="hidden" name="y">
                <input id="width" type="hidden" name="width">
                <input id="height" type="hidden" name="height">
                <button type="submit" class="btn btn-primary" th:text="#{crop.submit}"></button>
              </form>
              <div style="position: relative; display: inline-block;">
            <canvas id="crop-pdf-canvas" style="position: absolute; top: 0; left: 0; z-index: 1;"></canvas>
            <canvas id="overlayCanvas" style="position: absolute; top: 0; left: 0; z-index: 2;"></canvas>
        </div>
        <script>
          let pdfCanvas  = document.getElementById('crop-pdf-canvas');
          let overlayCanvas = document.getElementById('overlayCanvas');

          let context = pdfCanvas.getContext('2d');
          let overlayContext = overlayCanvas.getContext('2d');

          overlayCanvas.width = pdfCanvas.width;
          overlayCanvas.height = pdfCanvas.height;

          let isDrawing = false; // New flag to check if drawing is ongoing

          let cropForm = document.getElementById('cropForm');
          let fileInput = document.getElementById('fileInput-input');
          let xInput = document.getElementById('x');
          let yInput = document.getElementById('y');
          let widthInput = document.getElementById('width');
          let heightInput = document.getElementById('height');

          let pdfDoc = null;
          let currentPage = 1;
          let totalPages = 0;

          let startX = 0;
          let startY = 0;
          let rectWidth = 0;
          let rectHeight = 0;

          fileInput.addEventListener('change', function(e) {
            let file = e.target.files[0];
            if (file.type === 'application/pdf') {
              let reader = new FileReader();
              reader.onload = function(ev) {
                let typedArray = new Uint8Array(reader.result);
                pdfjsLib.GlobalWorkerOptions.workerSrc = 'pdfjs/pdf.worker.js'
                pdfjsLib.getDocument(typedArray).promise.then(function(pdf) {
                  pdfDoc = pdf;
                  totalPages = pdf.numPages;
                  renderPage(currentPage);
                });
              };
              reader.readAsArrayBuffer(file);
            }
          });

          overlayCanvas.addEventListener('mousedown', function(e) {
            // Clear previously drawn rectangle on the main canvas
            context.clearRect(0, 0, pdfCanvas.width, pdfCanvas.height);
            renderPage(currentPage); // Re-render the PDF

            // Clear the overlay canvas to ensure old drawings are removed
            overlayContext.clearRect(0, 0, overlayCanvas.width, overlayCanvas.height);

            startX = e.offsetX;
            startY = e.offsetY;
            isDrawing = true;
          });

          overlayCanvas.addEventListener('mousemove', function(e) {
            if (!isDrawing) return;
            overlayContext.clearRect(0, 0, overlayCanvas.width, overlayCanvas.height); // Clear previous rectangle

            rectWidth = e.offsetX - startX;
            rectHeight = e.offsetY - startY;
            overlayContext.strokeStyle = 'red';
            overlayContext.strokeRect(startX, startY, rectWidth, rectHeight);
          });

          overlayCanvas.addEventListener('mouseup', function(e) {
            isDrawing = false;

            rectWidth = e.offsetX - startX;
            rectHeight = e.offsetY - startY;

            let flippedY = pdfCanvas.height - e.offsetY;

            xInput.value = startX;
            yInput.value = flippedY;
            widthInput.value = rectWidth;
            heightInput.value = rectHeight;

            // Draw the final rectangle on the main canvas
            context.strokeStyle = 'red';
            context.strokeRect(startX, startY, rectWidth, rectHeight);

            overlayContext.clearRect(0, 0, overlayCanvas.width, overlayCanvas.height); // Clear the overlay
          });

          function renderPage(pageNumber) {
            pdfDoc.getPage(pageNumber).then(function(page) {
              let viewport = page.getViewport({ scale: 1.0 });
              pdfCanvas.width = viewport.width;
              pdfCanvas.height = viewport.height;

              overlayCanvas.width = viewport.width;  // Match overlay canvas size with PDF canvas
              overlayCanvas.height = viewport.height;

              let renderContext = { canvasContext: context, viewport: viewport };
              page.render(renderContext);
              pdfCanvas.classList.add("shadow-canvas");
            });
          }
        </script>
      </div>
      <th:block th:insert="~{fragments/footer.html :: footer}"></th:block>
    </div>
  </body>
</html>
