<?php
//tiek iekļauti autentifikācijas un datubāzes savienojuma faili
require 'database.php';
require 'auth.php';

//pārbauda, vai pieprasījuma metode ir POST
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    exit('Invalid request');
}

//lietotāja ID tiek iegūts no sesijas un piešķirts mainīgajam
$user_id = $_SESSION['user_id'];

//tiek iegūts lietotāja profila attēls no datubāzes
$stmt = $conn->prepare("SELECT profile_picture FROM profiles WHERE user_id = ?");
$stmt->bind_param("i", $user_id);
$stmt->execute();
$result = $stmt->get_result();
$current_profile_pic = $result->fetch_assoc();
$stmt->close();

//formā ievadītie dati tiek piešķirti mainīgajiem
$profile_description = $_POST['profile_description'] ?? '';
$new_profile_pic = $current_profile_pic['profile_picture'] ?? '';

//ja ir augšupielādēts jauns profila attēls, tiek apstrādāta augšupielāde
if (isset($_FILES['profile_picture']) && $_FILES['profile_picture']['error'] === UPLOAD_ERR_OK) {
    //direktorija, kurā tiks saglabāts augšupielādētais attēls
    $upload_dir = 'uploads/';
    //tiek ģenerēts unikāls faila nosaukums
    $new_profile_pic = uniqid() . '_' . basename($_FILES['profile_picture']['name']);
    //tiek veikta augšupielāde
    move_uploaded_file($_FILES['profile_picture']['tmp_name'], $upload_dir . $new_profile_pic);
}

//funkcija sociālo mediju URL validēšanai
function validate_social_url($url, $allowed_host) {
    //noņem liekās atstarpes
    $url = trim($url);
    //ja URL ir tukšs, atgriež null
    if ($url === '') return null;

    //pievieno 'https://' ja tas nav iekļauts URL sākumā
    if (!str_starts_with(strtolower($url), 'http')) {
        $url = 'https://' . $url;
    }

    //parsē URL, pievieno masīvam $parsed
    $parsed = parse_url($url);
    
    //ja mainīgais $parsed neeksistē vai ja tajā nav 'host' daļas, atgriež null
    if (!$parsed || !isset($parsed['host'])) {
        return null;
    } else {
        //parsed URL host daļa tiek piešķirta mainīgajam $host
        $host = strtolower($parsed['host']);
    }

    //ja host sākas ar 'www.', tas tiek noņemts
    if (str_starts_with($host, 'www.')) {
        $host = substr($host, 4);
    }

    //ja host nav atļauto hostu sarakstā, atgriež null
    if (!in_array($host, $allowed_host)) {
        return null;
    }
    
    //atgriež validēto URL
    return $url;
}

//tiek izsaukta funkcija validate_social_url katram sociālo mediju URL
$twitter   = (validate_social_url($_POST['twitter'] ?? '', ['twitter.com', 'x.com']));
$instagram = (validate_social_url($_POST['instagram'] ?? '', ['instagram.com']));
$linkedin  = (validate_social_url($_POST['linkedin'] ?? '', ['linkedin.com']));
$facebook  = (validate_social_url($_POST['facebook'] ?? '', ['facebook.com']));
$tiktok    = (validate_social_url($_POST['tiktok'] ?? '', ['tiktok.com']));

//ja visi lauki ir tukši, pāradresē uz profila lapu un dati netiek atjaunināti
if (!$profile_description && !$new_profile_pic && !$twitter && !$instagram && !$linkedin && !$facebook && !$tiktok) {
    header("Location: profile.php");
    exit();
}

//dati tiek ievietoti datubāzē vai atjaunināti, ja ieraksts jau pastāv
$stmt = $conn->prepare("INSERT INTO profiles (user_id, profile_description, profile_picture, twitter, instagram, linkedin, facebook, tiktok) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    ON DUPLICATE KEY UPDATE profile_description = VALUES(profile_description), profile_picture = VALUES(profile_picture), twitter = VALUES(twitter), instagram = VALUES(instagram), linkedin = VALUES(linkedin), facebook = VALUES(facebook), tiktok = VALUES(tiktok)");
$stmt->bind_param("isssssss", $user_id, $profile_description, $new_profile_pic, $twitter, $instagram, $linkedin, $facebook, $tiktok);
$stmt->execute();
$stmt->close();
$conn->close();

//pāradresē uz profila lapu pēc atjaunināšanas
header("Location: profile.php");
exit();
?>