<?php

namespace lib\Core\Http;

class Session extends Http
{
  public function __construct()
  {
    parent::__construct();
    $this->init();
  }

  // 세션 시작
  public function init(): void
  {
    if (session_status() === PHP_SESSION_NONE) {
      if (!is_dir(APP_SESSION_PATH)) {
        mkdir(APP_SESSION_PATH, APP_SESSION_PERMISSION, true);
      }
      session_save_path(APP_SESSION_PATH);
      session_start();
    }
  }

  // 세션에 값 저장
  public function set(string $key, $value): void
  {
    $_SESSION[$key] = $value;
  }

  // 세션에서 값 가져오기
  public function get(string $key): mixed
  {
    return $_SESSION[$key] ?? null;
  }

  // 세션에서 값 삭제
  public function remove(string $key): void
  {
    unset($_SESSION[$key]);
  }

  // 세션에 에러 메시지 설정
  public function flash(string $key, $message): void
  {
    $_SESSION['flash'][$key] = $message;
  }

  // 세션에 입력값 설정 (입력값 유지)
  public function flashInput(array $input): void
  {
    $_SESSION['flash']['input'] = $input;
  }

  // 세션에 flash 메시지가 있는지 확인
  public function hasFlash(string $key): bool
  {
    return isset($_SESSION['flash'][$key]);
  }

  // flash 메시지 가져오기
  public function getFlash(string $key): mixed
  {
    return $_SESSION['flash'][$key] ?? null;
  }

  // flash 메시지 삭제
  public function clearFlash(): void
  {
    unset($_SESSION['flash']);
  }
}
