<?php
/**
 * (c) ININOUT & PYXIS. All Rights Reserved.
 * Wszelkie modyfikacje tego pliku wymagaja zgloszenia oraz zgody autorow.
 * Any modifications to this file require notification and consent of the authors.
 */
/**
 * i-BOK 5 - Umowy (contracts helper functions)
 *
 * Umowy zarządzane w PYXIS (vUmowyLista), i-BOK tylko wyświetla i podpisuje.
 * Ten plik zachowuje: settings (show_in_menu) + wrapper do DB count.
 */

/**
 * Base directory for contracts settings storage
 */
function contracts_dir(): string {
    $base = defined('IBOK_CFG_DIR') ? IBOK_CFG_DIR : (defined('IBOK_ROOT') ? IBOK_ROOT . '/cfg' : __DIR__ . '/../cfg');
    return $base . '/contracts';
}

/**
 * Ensure contracts directory exists
 */
function contracts_ensure_dir(): void {
    $dir = contracts_dir();
    if (!is_dir($dir)) {
        @mkdir($dir, 0750, true);
    }
}

/**
 * Plik z metadanymi podpisów umów (data/godzina/IP klienta).
 * PYXIS (Umowy) nie przechowuje tych danych — trzymamy je po stronie i-BOK.
 */
function contracts_signatures_file(): string {
    return contracts_dir() . '/signatures.json';
}

/**
 * Zapisz metadane podpisania umowy: data, godzina i IP klienta.
 * Pierwsze podpisanie jest wiążące — nie nadpisujemy istniejącego wpisu.
 * Klucz = UM_INDEX (PK w Umowy).
 */
function contracts_record_signature(int $um_index, string $client_id, string $ip): void {
    contracts_ensure_dir();
    $file = contracts_signatures_file();
    $data = file_exists($file) ? (json_decode(@file_get_contents($file), true) ?: []) : [];
    if (isset($data[$um_index])) {
        return;
    }
    $data[$um_index] = [
        'signed_at' => date('Y-m-d H:i:s'),
        'ip'        => $ip,
        'client_id' => $client_id,
    ];
    @file_put_contents($file, json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), LOCK_EX);
}

/**
 * Pobierz wszystkie metadane podpisów (mapa UM_INDEX => ['signed_at','ip','client_id']).
 */
function contracts_all_signatures(): array {
    $file = contracts_signatures_file();
    if (!file_exists($file)) {
        return [];
    }
    return json_decode(@file_get_contents($file), true) ?: [];
}

/**
 * Pobierz metadane podpisania umowy (['signed_at','ip','client_id']) lub null.
 */
function contracts_get_signature(int $um_index): ?array {
    $all = contracts_all_signatures();
    return $all[$um_index] ?? null;
}

/**
 * Load contracts settings
 */
function contracts_load_settings(): array {
    $defaults = ['show_in_menu' => true];
    $file = contracts_dir() . '/settings.json';
    if (!file_exists($file)) return $defaults;
    $data = @json_decode(@file_get_contents($file), true);
    return is_array($data) ? array_merge($defaults, $data) : $defaults;
}

/**
 * Save contracts settings
 */
function contracts_save_settings(array $settings): bool {
    contracts_ensure_dir();
    $file = contracts_dir() . '/settings.json';
    return file_put_contents(
        $file,
        json_encode($settings, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE),
        LOCK_EX
    ) !== false;
}

/**
 * Check if contracts menu is visible in client panel
 */
function contracts_menu_visible(): bool {
    $settings = contracts_load_settings();
    return !empty($settings['show_in_menu']);
}

/**
 * Count pending contracts from DB (wrapper for badge/alerts)
 */
function contracts_count_pending_db(string $client_id): int {
    if (function_exists('db_count_umowy_do_podpisu')) {
        return db_count_umowy_do_podpisu($client_id);
    }
    return 0;
}
