<?php

define('APP_NAME', 'Nextgen Billing');
define('APP_URL', 'https://billing.nextgentec.co.in');

date_default_timezone_set('Asia/Kolkata');

if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

/*
|--------------------------------------------------------------------------
| DEMO / UI MODE
|--------------------------------------------------------------------------
| Database setup will be done later.
| For now the software will run without database.
|--------------------------------------------------------------------------
*/

define('DEMO_MODE', true);


/* -----------------------------
   Helper Functions
------------------------------ */

function e($value)
{
    return htmlspecialchars((string)$value, ENT_QUOTES, 'UTF-8');
}


function redirect($url)
{
    header('Location: ' . $url);
    exit;
}


function flash($type, $msg)
{
    $_SESSION['flash'] = [
        'type' => $type,
        'msg'  => $msg
    ];
}


function csrf_token()
{
    if (empty($_SESSION['csrf'])) {
        $_SESSION['csrf'] = bin2hex(random_bytes(32));
    }

    return $_SESSION['csrf'];
}


function check_csrf()
{
    $sessionToken = $_SESSION['csrf'] ?? '';
    $postedToken  = $_POST['csrf'] ?? '';

    if (
        empty($sessionToken) ||
        empty($postedToken) ||
        !hash_equals($sessionToken, $postedToken)
    ) {
        http_response_code(419);
        exit('Invalid CSRF token');
    }
}


function logged_in()
{
    return !empty($_SESSION['user_id']);
}


function require_login()
{
    if (!logged_in()) {
        redirect('index.php?page=login');
    }
}


function money($number)
{
    return '₹' . number_format((float)$number, 2);
}


/*
|--------------------------------------------------------------------------
| Temporary Demo Data
|--------------------------------------------------------------------------
| Database will be connected later.
|--------------------------------------------------------------------------
*/

function db()
{
    throw new Exception(
        'Database is disabled in UI setup mode.'
    );
}


function next_invoice_no()
{
    return 'INV-' . date('Y') . '-00001';
}
/* =========================================================
   LOGIN PAGE
   ========================================================= */

.loginbody{
    min-height:100vh;
    margin:0;
    display:flex;
    align-items:center;
    justify-content:center;
    background:#f3f6fb;
    padding:30px 20px;
}

.loginbox{
    width:100%;
    max-width:430px;
    background:#fff;
    border:1px solid #e4e8ef;
    border-radius:16px;
    padding:38px;
    box-shadow:0 15px 50px rgba(16,24,40,.08);
}

.loginbrand{
    display:flex;
    align-items:center;
    gap:12px;
    margin-bottom:32px;
}

.loginmark{
    width:48px;
    height:48px;
    border-radius:12px;
    background:#2864d7;
    color:#fff;
    display:flex;
    align-items:center;
    justify-content:center;
    font-size:22px;
    font-weight:800;
    box-shadow:0 8px 20px rgba(40,100,215,.25);
}

.loginbrand strong{
    display:block;
    color:#101828;
    font-size:19px;
}

.loginbrand small{
    display:block;
    margin-top:3px;
    color:#8792a5;
    font-size:12px;
}

.loginintro h1{
    margin:0 0 7px;
    font-size:28px;
    color:#101828;
}

.loginintro p{
    margin:0 0 28px;
    color:#7c8798;
    line-height:1.6;
}

.loginbox form{
    display:grid;
    gap:17px;
}

.loginbox label{
    display:block;
    color:#344054;
    font-weight:600;
}

.loginbox input{
    margin-top:8px;
}

.passwordbox{
    position:relative;
}

.passwordbox input{
    padding-right:65px;
}

.showpass{
    position:absolute;
    right:10px;
    top:50%;
    transform:translateY(-50%);
    border:0;
    background:transparent;
    color:#2864d7;
    font-size:12px;
    font-weight:700;
    cursor:pointer;
}

.loginbtn{
    width:100%;
    border:0;
    border-radius:9px;
    padding:13px 15px;
    margin-top:3px;
    background:#2864d7;
    color:#fff;
    font-weight:700;
    cursor:pointer;
    transition:.2s ease;
}

.loginbtn:hover{
    background:#1f55bd;
    transform:translateY(-1px);
}

.adminhint{
    margin-top:22px;
    padding:14px 16px;
    border:1px solid #e4e8ef;
    border-radius:10px;
    background:#f8fafc;
    text-align:center;
    color:#667085;
    font-size:12px;
    line-height:1.7;
}

.adminhint strong{
    display:block;
    color:#344054;
    margin-bottom:3px;
}

.adminhint span{
    display:block;
}

.adminhint b{
    color:#2864d7;
}

.empty{
    text-align:center;
    color:#98a1b0;
    padding:30px!important;
}


/* =========================================================
   TOPBAR
   ========================================================= */

.topbarleft{
    display:flex;
    align-items:center;
}


/* =========================================================
   MOBILE
   ========================================================= */

@media(max-width:520px){

    .loginbody{
        padding:15px;
        align-items:flex-start;
        padding-top:35px;
    }

    .loginbox{
        padding:27px 20px;
        border-radius:14px;
    }

    .loginbrand{
        margin-bottom:27px;
    }

    .loginintro h1{
        font-size:25px;
    }

}