<?php
require_once __DIR__ . '/../config.php';
require_once __DIR__ . '/../includes/functions.php';

$page_title   = 'My IPv4 Address – Details and Network Information';
$page_desc    = 'Show your IPv4 address with details: IP class, network, subnet, PTR record, ISP, ASN and location – free on ipcheck.tools.';
$page_current = 'ipv4';

$ips  = get_visitor_ips();
$ipv4 = $ips['ipv4'];

// Fallback: IPv4 via GET parameter (from JS)
if (!$ipv4 && !empty($_GET['ip']) && filter_var(trim($_GET['ip']), FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
    $ipv4 = trim($_GET['ip']);
}

if (!$ipv4) {
    $geo = [];
} else {
    $geo      = get_geoip($ipv4);
    $hostname = get_hostname($ipv4);
    $octets   = explode('.', $ipv4);
    $first    = (int)$octets[0];
    $class    = match(true) {
        $first < 128 => 'A', $first < 192 => 'B', $first < 224 => 'C',
        $first < 240 => 'D (Multicast)', default => 'E (Reserved)',
    };
    $ip_long  = ip2long($ipv4);
    $bin      = implode('.', array_map(fn($o) => sprintf('%08b', $o), $octets));
    $is_private = is_private_ip($ipv4);
}

require_once __DIR__ . '/header.php';
?>

<div class="hero">
  <div class="hero-label">IPv4 Detail View</div>
  <?php if ($ipv4): ?>
    <div class="hero-ip">
      <span class="accent"><?= h(implode('.', array_slice($octets, 0, 3))) ?></span>.<?= h($octets[3] ?? '') ?>
    </div>
    <div class="hero-sub">
      <span class="status-dot"></span>
      <?= h($geo['isp'] ?: $geo['asn_org'] ?? '') ?>
      <?php if ($geo['city']): ?>&middot; <?= h($geo['city']) ?><?php endif; ?>
      <?php if ($geo['country']): ?>, <?= h($geo['country']) ?><?php endif; ?>
      <?php if ($geo['country_iso']): ?><?= country_flag($geo['country_iso']) ?><?php endif; ?>
    </div>
    <div style="display:flex; gap:8px; justify-content:center; margin-top:12px; flex-wrap:wrap;">
      <button class="copy-btn" onclick="copyToClipboard('<?= h($ipv4) ?>', this)">
        <i class="ti ti-copy"></i> Copy IPv4
      </button>
      <a href="/en/whois.php?domain=<?= urlencode($ipv4) ?>" class="copy-btn">
        <i class="ti ti-id"></i> IP-WHOIS
      </a>
    </div>
  <?php else: ?>
    <div class="hero-ip" style="font-size:22px; color:var(--text4);">No IPv4 detected</div>
    <div class="hero-sub">Your connection appears to be IPv6 only</div>
  <?php endif; ?>
</div>

<div class="wrap">

  <div class="ad-slot"><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-8287576653347400" data-ad-slot="2715725452" data-ad-format="auto" data-full-width-responsive="true"></ins><script>(adsbygoogle = window.adsbygoogle || []).push({});</script></div>

  <?php if ($ipv4): ?>

    <div class="stat-grid">
      <div class="stat">
        <div class="stat-val" style="color:var(--blue-dim); font-size:12px;"><?= h($ipv4) ?></div>
        <div class="stat-key">IPv4 Address</div>
      </div>
      <div class="stat">
        <div class="stat-val">Class <?= $class ?></div>
        <div class="stat-key">IP Class</div>
      </div>
      <div class="stat">
        <div class="stat-val" style="color:<?= $is_private ? 'var(--orange)' : 'var(--green)' ?>;">
          <?= $is_private ? 'Private' : 'Public' ?>
        </div>
        <div class="stat-key">Type</div>
      </div>
      <div class="stat">
        <div class="stat-val" style="font-size:12px;">
          <?= $geo['country_iso'] ? country_flag($geo['country_iso']) : '–' ?>
        </div>
        <div class="stat-key">Country</div>
      </div>
    </div>

    <div class="grid2">
      <div class="card card-blue">
        <div class="card-title"><i class="ti ti-network"></i> Address Representation</div>
        <div class="data-row"><span class="dk">IPv4 (dotted decimal)</span><span class="dv mono blue"><?= h($ipv4) ?></span></div>
        <div class="data-row"><span class="dk">Decimal (32-bit)</span><span class="dv mono"><?= $ip_long < 0 ? sprintf('%u', $ip_long) : $ip_long ?></span></div>
        <div class="data-row"><span class="dk">Hexadecimal</span><span class="dv mono"><?= implode('.', array_map(fn($o) => strtoupper(sprintf('%02x', $o)), $octets)) ?></span></div>
        <div class="data-row"><span class="dk">Binary</span><span class="dv mono" style="font-size:10px; word-break:break-all;"><?= h($bin) ?></span></div>
        <div class="data-row"><span class="dk">IP Class</span><span class="dv">Class <?= $class ?></span></div>
        <div class="data-row"><span class="dk">Type</span><span class="dv">
          <?= $is_private ? '<span class="badge badge-orange">Private / RFC1918</span>' : '<span class="badge badge-green">Public</span>' ?>
        </span></div>
      </div>

      <div class="card">
        <div class="card-title"><i class="ti ti-building"></i> Provider & Network</div>
        <div class="data-row"><span class="dk">ISP / Provider</span><span class="dv"><?= h($geo['isp'] ?: $geo['asn_org'] ?: '–') ?></span></div>
        <div class="data-row"><span class="dk">Organisation</span><span class="dv"><?= h($geo['asn_org'] ?: '–') ?></span></div>
        <div class="data-row"><span class="dk">ASN</span><span class="dv mono">
          <?php if ($geo['asn']): ?>
            <a href="/en/asn.php?asn=<?= urlencode($geo['asn']) ?>" style="color:var(--blue-dim);"><?= h($geo['asn']) ?></a>
          <?php else: ?>–<?php endif; ?>
        </span></div>
        <div class="data-row"><span class="dk">Hostname / PTR</span><span class="dv mono" style="font-size:11px;"><?= h($hostname ?? '–') ?></span></div>
        <div class="data-row"><span class="dk">IP Version</span><span class="dv"><span class="badge badge-v4">IPv4 (32-bit)</span></span></div>
      </div>
    </div>

    <div class="grid2">
      <div class="card">
        <div class="card-title"><i class="ti ti-map-pin"></i> Location</div>
        <div class="data-row"><span class="dk">City</span><span class="dv"><?= h($geo['city'] ?: '–') ?></span></div>
        <div class="data-row"><span class="dk">State / Region</span><span class="dv"><?= h($geo['region'] ?: '–') ?></span></div>
        <div class="data-row"><span class="dk">Country</span><span class="dv">
          <?= $geo['country_iso'] ? country_flag($geo['country_iso']) : '' ?>
          <?= h($geo['country'] ?: '–') ?>
        </span></div>
        <div class="data-row"><span class="dk">Postal code</span><span class="dv mono"><?= h($geo['postal'] ?: '–') ?></span></div>
        <div class="data-row"><span class="dk">Timezone</span><span class="dv mono"><?= h($geo['timezone'] ?: '–') ?></span></div>
        <?php if ($geo['lat'] && $geo['lon']): ?>
        <div class="data-row"><span class="dk">Coordinates</span><span class="dv mono"><?= round($geo['lat'], 4) ?>° N · <?= round($geo['lon'], 4) ?>° E</span></div>
        <?php endif; ?>
      </div>

      <div class="card">
        <div class="card-title"><i class="ti ti-calculator"></i> Quick Tools</div>
        <div style="display:flex; flex-direction:column; gap:8px;">
          <a href="/en/subnet.php?ip=<?= urlencode($ipv4) ?>&prefix=24" class="btn btn-primary" style="font-size:12px; padding:6px 14px;">
            <i class="ti ti-calculator"></i> Subnet Calculator
          </a>
          <a href="/en/ip-lookup.php?ip=<?= urlencode($ipv4) ?>" class="btn btn-primary" style="font-size:12px; padding:6px 14px; background:#1e1a3a; border-color:#3d3080; color:var(--purple-dim);">
            <i class="ti ti-world-search"></i> IP Lookup
          </a>
          <a href="/en/blacklist.php?ip=<?= urlencode($ipv4) ?>" class="btn btn-ghost" style="font-size:12px; padding:6px 14px;">
            <i class="ti ti-shield-search"></i> Blacklist Check
          </a>
          <a href="/en/ip-konverter.php?ip=<?= urlencode($ipv4) ?>" class="btn btn-ghost" style="font-size:12px; padding:6px 14px;">
            <i class="ti ti-arrows-exchange"></i> IP Converter
          </a>
        </div>
      </div>
    </div>

  <?php else: ?>
    <div class="alert alert-warn">
      <i class="ti ti-alert-triangle"></i>
      <span>No IPv4 address detected. Your connection appears to be IPv6 only. <a href="/en/ipv6.php">View IPv6 details</a>.</span>
    </div>
  <?php endif; ?>

  <div class="ad-slot"><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-8287576653347400" data-ad-slot="2715725452" data-ad-format="auto" data-full-width-responsive="true"></ins><script>(adsbygoogle = window.adsbygoogle || []).push({});</script></div>

  <div class="tools-row">
    <a href="/en/"              class="tool-btn"><i class="ti ti-home"></i><span>My IP</span></a>
    <a href="/en/ipv4.php"      class="tool-btn current"><i class="ti ti-network"></i><span>IPv4 Detail</span></a>
    <a href="/en/ipv6.php"      class="tool-btn"><i class="ti ti-network"></i><span>IPv6 Detail</span></a>
    <a href="/en/ip-lookup.php" class="tool-btn"><i class="ti ti-world-search"></i><span>IP Lookup</span></a>
    <a href="/en/subnet.php"    class="tool-btn"><i class="ti ti-calculator"></i><span>Subnet</span></a>
  </div>

  <div class="seo-box">
    <h2>What is an IPv4 address?</h2>
    <p>IPv4 (Internet Protocol version 4) uses 32-bit addresses written as four numbers separated by dots (e.g. 192.168.1.1). There are approximately 4.3 billion possible IPv4 addresses. Since these are nearly exhausted, IPv6 with 128-bit addresses was introduced. Your IPv4 address is assigned by your ISP and can be static (always the same) or dynamic (changes regularly).</p>
  </div>

<?php if (!$ipv4): ?>
<script>
(async function() {
  try {
    const r = await fetch('https://api4.ipify.org?format=json', {signal: AbortSignal.timeout(3000)});
    const d = await r.json();
    if (d.ip) window.location.href = '/en/ipv4.php?ip=' + encodeURIComponent(d.ip);
  } catch(e) {}
})();
</script>
<?php endif; ?>
<?php require_once __DIR__ . '/footer.php'; ?>
