<?php
declare(strict_types=1);

function current_user(): ?array
{
    $id = $_SESSION['user_id'] ?? null;
    if (!$id) {
        return null;
    }

    return store_find('users', $id);
}

function require_login(): array
{
    $user = current_user();
    if (!$user) {
        flash('error', 'Bu işlem için giriş yapmalısın.');
        redirect(url('temo/'));
    }
    return $user;
}

function login_user(array $user): void
{
    $_SESSION['user_id'] = $user['id'];
}

function logout_user(): void
{
    unset($_SESSION['user_id']);
}

function find_user_by_email(string $email): ?array
{
    $email = mb_strtolower(trim($email));
    foreach (store_read('users') as $user) {
        if (mb_strtolower($user['email'] ?? '') === $email) {
            return $user;
        }
    }
    return null;
}

function find_user_by_login(string $login): ?array
{
    $login = mb_strtolower(trim($login));
    if ($login === '') {
        return null;
    }
    foreach (store_read('users') as $user) {
        if (mb_strtolower((string) ($user['username'] ?? '')) === $login) {
            return $user;
        }
        if (mb_strtolower((string) ($user['email'] ?? '')) === $login) {
            return $user;
        }
    }
    return null;
}

function register_user(string $name, string $email, string $password, string $bio = ''): array|string
{
    $name = trim($name);
    $email = mb_strtolower(trim($email));
    $bio = trim($bio);

    if ($name === '' || $email === '' || $password === '') {
        return 'Tüm zorunlu alanları doldur.';
    }
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        return 'Geçerli bir e-posta gir.';
    }
    if (mb_strlen($password) < 6) {
        return 'Şifre en az 6 karakter olmalı.';
    }
    if (find_user_by_email($email)) {
        return 'Bu e-posta zaten kayıtlı.';
    }

    $user = [
        'id' => new_id('u_'),
        'name' => $name,
        'email' => $email,
        'password' => password_hash($password, PASSWORD_DEFAULT),
        'bio' => $bio !== '' ? $bio : 'Doğal ürün satıcısı',
        'iban' => '',
        'bank' => '',
        'account_name' => $name,
        'avatar' => '',
        'created_at' => date('c'),
    ];

    store_upsert('users', $user);
    return $user;
}
