<div class="af-card">
  <div class="flex items-start justify-between gap-3">
    <div>
      <h3 class="font-semibold text-slate-900">Today’s Attendance</h3>
      <p class="mt-1 text-sm text-slate-600">
        {% if today_attendance %}
          Punch In: {{ today_attendance.punch_in_local_at.strftime('%H:%M') if today_attendance.punch_in_local_at else (today_attendance.punch_in_utc.strftime('%H:%M UTC') if today_attendance.punch_in_utc else '-') }} ·
          Punch Out: {{ today_attendance.punch_out_local_at.strftime('%H:%M') if today_attendance.punch_out_local_at else (today_attendance.punch_out_utc.strftime('%H:%M UTC') if today_attendance.punch_out_utc else '-') }}
        {% else %}
          Attendance not marked for today.
        {% endif %}
      </p>
      {% if today_attendance %}
      <p class="mt-1 text-xs text-slate-500">
        Approval: {{ today_attendance.approval_status.replace('_',' ').title() }} ·
        Geo: {{ today_attendance.punch_in_geo_status.replace('_',' ').title() if today_attendance.punch_in_geo_status else 'Not Captured' }}
        {% if today_attendance.punch_out_geo_status %} / {{ today_attendance.punch_out_geo_status.replace('_',' ').title() }}{% endif %}
      </p>
      {% endif %}
    </div>
    <a href="/employee/attendance" class="af-btn af-btn-secondary">Full View</a>
  </div>

  {% if employee %}
    {% if is_mobile_attendance_device %}
    <div id="employee-geo-status" class="mt-4 rounded-xl border border-slate-200 bg-slate-50 px-3 py-2 text-xs text-slate-600">
      Click Punch In/Punch Out. The app will ask for mobile browser location before submitting attendance.
    </div>
    <div class="mt-2 rounded-xl border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-800">
      Attendance marking is allowed only from mobile. Browser location/GPS is mandatory. If location is denied/unavailable, attendance will not be submitted.
    </div>

    <div class="mt-4 grid gap-3 md:grid-cols-2 xl:grid-cols-1">
      <form method="post" action="/employee/attendance/punch-in" class="employee-attendance-geo-form rounded-2xl border border-slate-200 p-4">
        <input type="hidden" name="csrf_token" value="{{ csrf_token }}">
        <input type="hidden" name="latitude">
        <input type="hidden" name="longitude">
        <input type="hidden" name="accuracy_meters">
        <label class="block text-xs font-semibold uppercase text-slate-500">Remarks / OD Reason</label>
        <input name="remarks" class="mt-2 w-full rounded-xl border border-slate-300 px-3 py-2 text-sm" placeholder="Optional remarks">
        <button class="mt-3 w-full rounded-xl bg-emerald-600 px-4 py-2 text-sm font-semibold text-white hover:bg-emerald-700 disabled:opacity-50" {% if today_attendance and today_attendance.punch_in_utc %}disabled{% endif %}>Punch In</button>
      </form>
      <form method="post" action="/employee/attendance/punch-out" class="employee-attendance-geo-form rounded-2xl border border-slate-200 p-4">
        <input type="hidden" name="csrf_token" value="{{ csrf_token }}">
        <input type="hidden" name="latitude">
        <input type="hidden" name="longitude">
        <input type="hidden" name="accuracy_meters">
        <label class="block text-xs font-semibold uppercase text-slate-500">Remarks / OD Reason</label>
        <input name="remarks" class="mt-2 w-full rounded-xl border border-slate-300 px-3 py-2 text-sm" placeholder="Optional remarks">
        <button class="mt-3 w-full rounded-xl bg-brand-600 px-4 py-2 text-sm font-semibold text-white hover:bg-brand-700 disabled:opacity-50" {% if not today_attendance or not today_attendance.punch_in_utc or today_attendance.punch_out_utc %}disabled{% endif %}>Punch Out</button>
      </form>
    </div>

    <div id="employee-location-consent-modal" class="fixed inset-0 z-50 hidden items-center justify-center bg-slate-900/60 px-4" aria-hidden="true">
      <div class="w-full max-w-lg rounded-3xl bg-white p-6 shadow-2xl">
        <div class="flex gap-4">
          <div class="flex h-12 w-12 shrink-0 items-center justify-center rounded-full bg-emerald-100 text-emerald-700">📍</div>
          <div>
            <h3 class="text-lg font-semibold text-slate-900">Enable location for attendance</h3>
            <p class="mt-2 text-sm leading-6 text-slate-600">
              To mark attendance, this app needs your current location to verify whether you are within your branch geofence.
              Click Continue, then choose <strong>Allow</strong> in the browser location popup.
            </p>
            <p class="mt-3 text-xs leading-5 text-slate-500">
              If you are outside the branch, attendance will require approval. If browser location is denied/unavailable while branch geofence is enabled, attendance will not be submitted.
            </p>
          </div>
        </div>
        <div class="mt-6 flex justify-end gap-3">
          <button type="button" id="employee-location-modal-cancel" class="rounded-xl border border-slate-300 px-4 py-2 text-sm font-semibold text-slate-700 hover:bg-slate-50">Cancel</button>
          <button type="button" id="employee-location-modal-continue" class="rounded-xl bg-emerald-600 px-4 py-2 text-sm font-semibold text-white hover:bg-emerald-700">Continue</button>
        </div>
      </div>
    </div>

    <script>
    window.EmployeePortalGeo = window.EmployeePortalGeo || (function () {
      function updateStatus(message, tone) {
        var status = document.getElementById('employee-geo-status');
        if (!status) return;
        status.textContent = message;
        status.className = 'mt-4 rounded-xl border px-3 py-2 text-xs ' + (
          tone === 'ok' ? 'border-emerald-200 bg-emerald-50 text-emerald-700' :
          tone === 'warn' ? 'border-amber-200 bg-amber-50 text-amber-700' :
          'border-slate-200 bg-slate-50 text-slate-600'
        );
      }

      function setHidden(form, lat, lon, acc) {
        var latInput = form.querySelector('input[name="latitude"]');
        var lonInput = form.querySelector('input[name="longitude"]');
        var accInput = form.querySelector('input[name="accuracy_meters"]');
        if (latInput) latInput.value = lat || '';
        if (lonInput) lonInput.value = lon || '';
        if (accInput) accInput.value = acc || '';
      }

      function openLocationModal() {
        return new Promise(function (resolve) {
          var modal = document.getElementById('employee-location-consent-modal');
          var modalContinue = document.getElementById('employee-location-modal-continue');
          var modalCancel = document.getElementById('employee-location-modal-cancel');
          if (!modal || !modalContinue || !modalCancel) {
            resolve(true);
            return;
          }

          function cleanup(result) {
            modal.classList.add('hidden');
            modal.classList.remove('flex');
            modal.setAttribute('aria-hidden', 'true');
            modalContinue.removeEventListener('click', onContinue);
            modalCancel.removeEventListener('click', onCancel);
            resolve(result);
          }
          function onContinue() { cleanup(true); }
          function onCancel() {
            updateStatus('Attendance punch cancelled. Location permission was not requested.', 'warn');
            cleanup(false);
          }

          modalContinue.addEventListener('click', onContinue);
          modalCancel.addEventListener('click', onCancel);
          modal.classList.remove('hidden');
          modal.classList.add('flex');
          modal.setAttribute('aria-hidden', 'false');
          modalContinue.focus();
        });
      }

      function captureLocation(form) {
        return new Promise(function (resolve) {
          if (!navigator.geolocation) {
            setHidden(form, '', '', '');
            updateStatus('Browser geolocation is not available. Attendance was not submitted. Enable browser/device location and try again.', 'warn');
            resolve(false);
            return;
          }
          updateStatus('Browser location popup opened. Please choose Allow to capture location...', 'info');
          navigator.geolocation.getCurrentPosition(function (pos) {
            var c = pos.coords || {};
            setHidden(form, c.latitude, c.longitude, c.accuracy);
            updateStatus('Location captured. Accuracy: ' + Math.round(c.accuracy || 0) + ' meters.', 'ok');
            resolve(true);
          }, function (err) {
            setHidden(form, '', '', '');
            var reason = 'Location permission denied or unavailable.';
            if (err && err.code === 1) reason = 'Location permission denied. Allow location for this site in browser settings.';
            if (err && err.code === 2) reason = 'Location unavailable. Enable device location service and try again.';
            if (err && err.code === 3) reason = 'Location capture timed out. Try again with stable GPS/location service.';
            updateStatus(reason + ' Attendance was not submitted. Please allow browser location/GPS and try again.', 'warn');
            resolve(false);
          }, { enableHighAccuracy: true, timeout: 20000, maximumAge: 0 });
        });
      }

      function bind() {
        document.querySelectorAll('.employee-attendance-geo-form').forEach(function (form) {
          if (form.dataset.geoBound === '1') return;
          form.dataset.geoBound = '1';
          form.addEventListener('submit', async function (event) {
            if (form.dataset.geoSubmitted === '1') return;
            event.preventDefault();

            var proceed = await openLocationModal();
            if (!proceed) return;

            var captured = await captureLocation(form);
            if (!captured) {
              updateStatus('Attendance not submitted because location was not captured.', 'warn');
              return;
            }
            form.dataset.geoSubmitted = '1';
            form.submit();
          });
        });
      }

      return {bind: bind};
    })();
    window.EmployeePortalGeo.bind();
    </script>
    {% else %}
    <div class="mt-4 rounded-2xl border border-amber-200 bg-amber-50 p-4 text-sm text-amber-900">
      <div class="font-semibold">Attendance marking is mobile-only.</div>
      <p class="mt-1">{{ attendance_punch_blocked_reason or 'Please open the ERP on your mobile phone to mark punch-in or punch-out. Desktop access is available only for attendance history.' }}</p>
    </div>
    {% endif %}
  {% endif %}
</div>
