"use client";

// import dynamic from "next/dynamic";
// import { useRef, useEffect, forwardRef } from "react";

// const originalText =
//   "";

type Options = {
  randomizeChance?: number;
  reversed?: boolean;
};

export const encryptText = (
  text: string,
  progress: number,
  _options?: Options,
) => {
  const options = {
    randomizeChance: 0.7,
    ..._options,
  };

  const encryptionChars = "a-zA-Z0-9*=?!";
  const skipTags = ["<br class='lg-max:hidden'>", "<span>", "</span>"];

  // Calculate how many characters should be encrypted
  const totalChars = text.length;
  const encryptedCount = Math.floor(totalChars * (1 - progress));

  let result = "";
  let charIndex = 1;

  for (let i = 0; i < text.length; i++) {
    const char = text[i];

    // Check if we're at the start of a tag to skip
    let shouldSkip = false;

    for (const tag of skipTags) {
      if (text.substring(i, i + tag.length) === tag) {
        result += tag;
        i += tag.length - 1; // -1 because loop will increment
        shouldSkip = true;
        break;
      }
    }

    if (shouldSkip) continue;

    // Skip spaces - keep them as is
    if (char === " ") {
      result += char;
      charIndex++;
      continue;
    }

    // If this character should be encrypted
    if (
      options.reversed
        ? charIndex < encryptedCount
        : text.length - charIndex < encryptedCount
    ) {
      // 40% chance to show original character, 60% chance to encrypt
      if (Math.random() < options.randomizeChance) {
        result += char;
      } else {
        // Use random character from encryption set
        const randomIndex = Math.floor(Math.random() * encryptionChars.length);
        result += encryptionChars[randomIndex];
      }
    } else {
      // Keep original character
      result += char;
    }

    charIndex++;
  }

  return result;
};

// const Wrapper = forwardRef<
//   HTMLDivElement,
//   React.HTMLAttributes<HTMLDivElement>
// >((props, ref) => {
//   return (
//     <div className="text-title-h1 mx-auto text-center [&_span]:text-heat-100 mb-12 lg:mb-16">
//       <div {...props} className="hidden lg:contents" ref={ref} />
//       <div
//         className="lg:hidden contents"
//         dangerouslySetInnerHTML={{ __html: originalText }}
//       />
//     </div>
//   );
// });

// Wrapper.displayName = "Wrapper";

// export default dynamic(() => Promise.resolve(HomeHeroTitle), {
//   ssr: false,
//   loading: () => (
//     <Wrapper
//       dangerouslySetInnerHTML={{ __html: encryptText(originalText, 0) }}
//     />
//   ),
// });

// function HomeHeroTitle() {
//   const textRef = useRef<HTMLDivElement>(null);

//   useEffect(() => {
//     if (window.innerWidth < 996) {
//       return;
//     }

//     let progress = 0;
//     let increaseProgress = -10;

//     const animate = () => {
//       increaseProgress = (increaseProgress + 1) % 5;

//       if (increaseProgress === 4) {
//         progress += 0.3;
//       }

//       if (progress > 1) {
//         progress = 1;
//         textRef.current!.innerHTML = encryptText(originalText, progress);

//         return;
//       }

//       textRef.current!.innerHTML = encryptText(originalText, progress);

//       const interval = 50 + progress * 20;
//       setTimeout(animate, interval);
//     };

//     animate();
//   }, []);

//   return (
//     <Wrapper
//       dangerouslySetInnerHTML={{ __html: encryptText(originalText, 0) }}
//       ref={textRef}
//     />
//   );
// }

// import dynamic from "next/dynamic";
// import { useRef, useEffect, forwardRef } from "react";

// const originalText =
//   "Turn websites into <br class='lg-max:hidden'><span>LLM-ready</span> data";

// type Options = {
//   randomizeChance?: number;
//   reversed?: boolean;
// };

// export const encryptText = (
//   text: string,
//   progress: number,
//   _options?: Options,
// ) => {
//   const options = {
//     randomizeChance: 0.7,
//     ..._options,
//   };

//   const encryptionChars = "a-zA-Z0-9*=?!";
//   const skipTags = ["<br class='lg-max:hidden'>", "<span>", "</span>"];

//   // Calculate how many characters should be encrypted
//   const totalChars = text.length;
//   const encryptedCount = Math.floor(totalChars * (1 - progress));

//   let result = "";
//   let charIndex = 1;

//   for (let i = 0; i < text.length; i++) {
//     const char = text[i];

//     // Check if we're at the start of a tag to skip
//     let shouldSkip = false;

//     for (const tag of skipTags) {
//       if (text.substring(i, i + tag.length) === tag) {
//         result += tag;
//         i += tag.length - 1; // -1 because loop will increment
//         shouldSkip = true;
//         break;
//       }
//     }

//     if (shouldSkip) continue;

//     // Skip spaces - keep them as is
//     if (char === " ") {
//       result += char;
//       charIndex++;
//       continue;
//     }

//     // If this character should be encrypted
//     if (
//       options.reversed
//         ? charIndex < encryptedCount
//         : text.length - charIndex < encryptedCount
//     ) {
//       // 40% chance to show original character, 60% chance to encrypt
//       if (Math.random() < options.randomizeChance) {
//         result += char;
//       } else {
//         // Use random character from encryption set
//         const randomIndex = Math.floor(Math.random() * encryptionChars.length);
//         result += encryptionChars[randomIndex];
//       }
//     } else {
//       // Keep original character
//       result += char;
//     }

//     charIndex++;
//   }

//   return result;
// };

// const Wrapper = forwardRef<
//   HTMLDivElement,
//   React.HTMLAttributes<HTMLDivElement>
// >((props, ref) => {
//   return (
//     <div className="text-title-h1 mx-auto text-center [&_span]:text-heat-100 mb-12 lg:mb-16">
//       <div {...props} className="hidden lg:contents" ref={ref} />
//       <div
//         className="lg:hidden contents"
//         dangerouslySetInnerHTML={{ __html: originalText }}
//       />
//     </div>
//   );
// });

// Wrapper.displayName = "Wrapper";

// export default dynamic(() => Promise.resolve(HomeHeroTitle), {
//   ssr: false,
//   loading: () => (
//     <Wrapper
//       dangerouslySetInnerHTML={{ __html: encryptText(originalText, 0) }}
//     />
//   ),
// });

export default function HomeHeroTitle() {
  return (
    <h1 className="text-title-h1 mx-auto text-center [&_span]:text-heat-100 mb-12 lg:mb-16">
     Open Lovable <span>v3</span>
    </h1>
  );
}
