<?php

namespace App\Controllers;

use App\Models\AdminModel;

class AdminAuth extends BaseController
{
    protected $adminModel;

    public function __construct()
    {
        $this->adminModel = new AdminModel();
    }

    public function index()
    {
        if (session()->get('is_admin') === true) {
            return redirect()->to('admin/dashboard');
        }

        return view('admin/login');
    }

    // Handle login
    public function login()
    {
        $rules = [
            'username' => 'required',
            'password' => 'required',
        ];

        if (!$this->validate($rules)) {
            return redirect()->back()
                ->with('errors', $this->validator->getErrors());
        }

        $admin = $this->adminModel
            ->where('username', $this->request->getPost('username'))
            ->first();

        if (!$admin || !password_verify($this->request->getPost('password'), $admin['password'])) {
            return redirect()->back()
                ->with('errors', ['Invalid username or password']);
        }

        session()->set([
            'admin_id' => $admin['id'],
            'username' => $admin['username'],
            'is_admin' => true,
        ]);

        return redirect()->to('/admin/dashboard');
    }
    public function changePassword()
    {
        if ($this->request->getMethod() === 'POST') {

            $validation = \Config\Services::validation();

            $validation->setRules([
                'oldPassword'  => 'required',
                'newPassword'  => 'required',
                'cNewPassword' => 'required|matches[newPassword]',
            ]);

            if (!$validation->withRequest($this->request)->run()) {
                session()->setFlashdata('error', $validation->getErrors());
                return redirect()->to('admin/changePassword');
            }

            $oldPassword = $this->request->getPost('oldPassword');
            $newPassword = $this->request->getPost('newPassword');

            $admin = $this->adminModel->getAdmin();

            if (!password_verify($oldPassword, $admin['password'])) {
                session()->setFlashdata('nomatch', 'Your old password is not correct');
                return redirect()->to('admin/changePassword');
            }

            $hashedPassword = password_hash($newPassword, PASSWORD_DEFAULT);

            $updateData = [
                'password' => $hashedPassword
            ];

            $result = $this->adminModel->changePassword($updateData);

            if ($result) {
                session()->setFlashdata('success', 'Password updated successfully');
            } else {
                session()->setFlashdata('error', 'Password update failed');
            }

            return redirect()->to('admin/changePassword');
        }

        $this->loadAdminView("changePassword", []);
    }


    // Logout
    public function logout()
    {
        session()->destroy();
        return redirect()->to('/');
    }
}
