import React, { createContext, useEffect, useState } from "react";
import {
  Tailwind,
  CSS,
  Latex,
  PageBreak,
  Footnote,
  Markdown,
} from "@onedoc/react-print";

export const SectionComponent = ({ title, content, isSection }) => {
  return (
    <div>
      {isSection ? (
        <h2 className="text-md italic text-center uppercase">{title}</h2>
      ) : (
        <h3 className="text-sm italic">{title}</h3>
      )}
      {/* The content should have an indent on the first sentence, not after*/}
      <div className="text-xs text-justify">{content}</div>
    </div>
  );
};

<React.Fragment>
  {/* A CSS snippet to define the page size, margins, fonts, etc. 
      It also enforce the space between line to be small*/}
  <CSS>
    {String.raw`
          @page {
            size: A4;
            margin: 2cm;
          }

          body {
            line-height: 1.1;
          }
          
        `}
  </CSS>

  <Tailwind>
    {/* A Header with the title of the research in large and bold, then the author name, the supervisor and the institute. All centered */}
    <div className="text-center">
      <h1 className="text-2xl font-bold">Title of the Research Report</h1>
      <p className="text-base">Author: Name of the Author</p>
      <p className="text-base">Supervisor: Name of the Supervisor</p>
      <p className="text-base">Institute: Name of the Institute</p>
    </div>

    <br />

    {/* A Tailwind component to define the layout of the page */}

    {/* 2 columns */}
    <div className="columns-2 gap-8" style={{ columnFill: "auto" }}>
      {/* Abstract*/}
      {/* <Abstract
            text="Lorem ipsum dolor sit amet [1], consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
          /> */}

      <p className="text-justify text-xs font-bold italic">
        Abstract -- Lorem ipsum dolor sit amet [1], consectetur adipiscing elit.
        Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
        enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
        aliquip ex ea commodo consequat.
      </p>

      <br />

      {/* An Introduction Section with no content*/}
      <SectionComponent
        title="1. Introduction"
        content={null}
        isSection={true}
      />

      {/* A sub section with a title and a content */}
      <SectionComponent
        title="A. Sub Section"
        content={
          <p className="text-justify text-xs">
            Lorem ipsum dolor sit amet [2], consectetur adipiscing elit. Sed do
            eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
            ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
            aliquip ex ea commodo consequat. Duis aute irure dolor in
            reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
            pariatur.{" "}
            <Footnote style={{ float: "footnote page" }}>Footnote 1</Footnote>
          </p>
        }
        isSection={false}
      />

      <br />

      {/* A sub section with a title and a content with a formula */}
      <SectionComponent
        title="B. Sub section"
        content={
          <React.Fragment>
            <p>
              Lorem ipsum dolor sit amet [3], consectetur adipiscing elit. Sed
              do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
              enim ad minim veniam, quis nostrud exercitation ullamco laboris
              nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
              reprehenderit in voluptate velit esse cillum dolore eu fugiat
              nulla pariatur.
            </p>
            <br />

            {/* add the latex component to display a formula */}
            <div className="text-center">
              <Latex>
                {String.raw`f(x) = \int_{-\infty}^\infty \hat f(\xi) e^{2 \pi i \xi x} d\xi  (1)`}
              </Latex>
            </div>
          </React.Fragment>
        }
        isSection={false}
      />

      <br />

      {/* A sub section with a title and content, and an image */}
      <SectionComponent
        title="C. Sub section"
        content={
          <React.Fragment>
            <p>
              Lorem ipsum dolor sit amet [4], consectetur adipiscing elit. Sed
              do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
              enim ad minim veniam, quis nostrud exercitation ullamco laboris
              nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
              reprehenderit in voluptate velit esse cillum dolore eu fugiat
              nulla pariatur.
            </p>
            {/* Add an image, with a caption display under */}
            <div className="text-center">
              {/* <img src="varianceexplaine.png" alt="Image" /> */}
              <img
                src="https://machinelearningmastery.com/wp-content/uploads/2018/12/Example-of-Train-and-Validation-Learning-Curves-Showing-A-Good-Fit.png"
                alt="Image"
              />
              <p className="text-xs italic text-center">
                Figure 1: Caption of the image
              </p>
            </div>
          </React.Fragment>
        }
        isSection={false}
      />

      <br />

      {/* A section Data with  */}
      <SectionComponent title="2. Data" content={null} isSection={true} />

      {/* A sub section with a title and a content */}
      <SectionComponent
        title="A. Sub section"
        content={
          <p>
            Lorem ipsum dolor sit amet [5], consectetur adipiscing elit. Sed do
            eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
            ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
            aliquip ex ea commodo consequat. Duis aute irure dolor in
            reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
            pariatur.
          </p>
        }
        isSection={false}
      />

      <br />

      {/* A sub section with a title and a content, and a table in with 3 columns and 6 raws, the table should be centered and it must have 1 horizontal the first raw and the second one and then verticle line between each column */}
      <SectionComponent
        title="B. Sub section"
        content={
          <React.Fragment>
            <p>
              Lorem ipsum dolor sit amet [6], consectetur adipiscing elit. Sed
              do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
              enim ad minim veniam, quis nostrud exercitation ullamco laboris
              nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
              reprehenderit in voluptate velit esse cillum dolore eu fugiat
              nulla pariatur.
            </p>
            <br />
            <table className="table-auto mx-auto w-full border-collapse">
              <thead>
                <tr>
                  <th className="border border-black px-1 py-1 text-center font-medium font-bold">
                    {" "}
                    Header 1{" "}
                  </th>
                  <th className="border border-black px-1 py-1 text-center font-medium font-bold">
                    {" "}
                    Header 2{" "}
                  </th>
                  <th className="border border-black px-1 py-1 text-center font-medium font-bold">
                    {" "}
                    Header 3{" "}
                  </th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td className="border border-black px-1 py-1 text-center">
                    {" "}
                    Data 1{" "}
                  </td>
                  <td className="border border-black px-1 py-1 text-center">
                    {" "}
                    Data 2{" "}
                  </td>
                  <td className="border border-black px-1 py-1 text-center">
                    {" "}
                    Data 3{" "}
                  </td>
                </tr>
                <tr>
                  <td className="border border-black px-1 py-1 text-center">
                    {" "}
                    Data 4{" "}
                  </td>
                  <td className="border border-black px-1 py-1 text-center">
                    {" "}
                    Data 5{" "}
                  </td>
                  <td className="border border-black px-1 py-1 text-center">
                    {" "}
                    Data 6{" "}
                  </td>
                </tr>
              </tbody>
            </table>
            {/* caption to the table */}
            <p className="text-xs italic text-center">
              Table 1: Caption of the table
            </p>
          </React.Fragment>
        }
        isSection={false}
      />

      <br />

      {/* A Section Methodology */}
      <SectionComponent
        title="3. Methodology"
        content={null}
        isSection={true}
      />

      {/* A sub section with a title and a content */}
      <SectionComponent
        title="A. Sub section"
        content={
          <p>
            Lorem ipsum dolor sit amet [7], consectetur adipiscing elit. Sed do
            eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
            ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
            aliquip ex ea commodo consequat. Duis aute irure dolor in
            reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
            pariatur.
          </p>
        }
        isSection={false}
      />

      <br />

      {/* A sub section with a title and a content, and a code snippet */}
      <SectionComponent
        title="B. Sub section"
        content={
          <React.Fragment>
            <p>
              Lorem ipsum dolor sit amet [8], consectetur adipiscing elit. Sed
              do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
              enim ad minim veniam, quis nostrud exercitation ullamco laboris
              nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
              reprehenderit in voluptate velit esse cillum dolore eu fugiat
              nulla pariatur.
            </p>
            <br />
            <pre className="bg-gray-100 p-2">
              <code>
                {String.raw`function helloWorld() {
  console.log("Hello, World!");
  console.log("This is a code snippet");
}`}
              </code>
            </pre>
          </React.Fragment>
        }
        isSection={false}
      />

      <br />
      <br />

      {/* A Section Results */}
      <SectionComponent title="4. Results" content={null} isSection={true} />

      {/* A sub section with a title and a content */}
      <SectionComponent
        title="A. Sub section"
        content={
          <p>
            Lorem ipsum dolor sit amet [9], consectetur adipiscing elit. Sed do
            eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
            ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
            aliquip ex ea commodo consequat. Duis aute irure dolor in
            reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
            pariatur.
          </p>
        }
        isSection={false}
      />

      <br />

      {/* A sub section with a title and a content, and a list */}
      <SectionComponent
        title="B. Sub section"
        content={
          <React.Fragment>
            <p>
              Lorem ipsum dolor sit amet [10], consectetur adipiscing elit. Sed
              do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
              enim ad minim veniam, quis nostrud exercitation ullamco laboris
              nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
              reprehenderit in voluptate velit esse cillum dolore eu fugiat
              nulla pariatur.
            </p>
            <br />
            <ul className="list-disc list-inside">
              <li> Item 1 </li>
              <li> Item 2 </li>
              <li> Item 3 </li>
            </ul>
          </React.Fragment>
        }
        isSection={false}
      />

      <br />

      {/* A Section Conclusion */}
      <SectionComponent title="5. Conclusion" content={null} isSection={true} />

      {/* A sub section with a title and a content */}
      <SectionComponent
        title="A. Sub section"
        content={
          <p>
            Lorem ipsum dolor sit amet{" "}
            <Footnote children={undefined} style={{ float: "footnote page" }}>
              {" "}
              <Markdown
                style={{ color: "blue" }}
              >{`[The BEST open-source library](https://github.com/OnedocLabs/react-print-pdf)`}</Markdown>{" "}
            </Footnote>
            , consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut
            labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
            exercitation ullamco laboris nisi ut aliquip ex ea commodo
            consequat. Duis aute irure dolor in reprehenderit in voluptate velit
            esse cillum dolore eu fugiat nulla pariatur.
          </p>
        }
        isSection={false}
      />

      <br />

      {/* A sub section with a title and a content, and a formula */}
      <SectionComponent
        title="B. Sub section"
        content={
          <React.Fragment>
            <p>
              Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do
              eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
              enim ad minim veniam, quis nostrud exercitation ullamco laboris
              nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
              reprehenderit in voluptate velit esse cillum dolore eu fugiat
              nulla pariatur.
            </p>
            <br />
            <div className="text-center">
              <Latex>
                {String.raw`f(x) = \int_{-\infty}^\infty \hat f(\xi) e^{2 \pi i \xi x} d\xi  (1)`}
              </Latex>
            </div>
          </React.Fragment>
        }
        isSection={false}
      />

      <br />

      {/* A Section References where te content is 10 references starting with [1] and ending with [10] */}
      <SectionComponent
        title="References"
        content={
          <React.Fragment>
            <p className="italic">
              {" "}
              [1] Reference 1 Author Name, Article Title, Journal, Year
            </p>
            <p className="italic">
              {" "}
              [2] Reference 2 Author Name, Article Title, Journal, Year
            </p>
            <p className="italic">
              {" "}
              [3] Reference 3 Author Name, Article Title, Journal, Year
            </p>
            <p className="italic">
              {" "}
              [4] Reference 4 Author Name, Article Title, Journal, Year
            </p>
            <p className="italic">
              {" "}
              [5] Reference 5 Author Name, Article Title, Journal, Year
            </p>
            <p className="italic">
              {" "}
              [6] Reference 6 Author Name, Article Title, Journal, Year
            </p>
            <p className="italic">
              {" "}
              [7] Reference 7 Author Name, Article Title, Journal, Year
            </p>
            <p className="italic">
              {" "}
              [8] Reference 8 Author Name, Article Title, Journal, Year
            </p>
            <p className="italic">
              {" "}
              [9] Reference 9 Author Name, Article Title, Journal, Year
            </p>
            <p className="italic">
              {" "}
              [10] Reference 10 Author Name, Article Title, Journal, Year
            </p>
          </React.Fragment>
        }
        isSection={true}
      />

      {/* Page Break */}
      <PageBreak />
    </div>
  </Tailwind>
</React.Fragment>;