<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Usuario_model extends CI_Model
{
	public function __construct()
	{
		parent::__construct();
		$this->crear_tabla_si_no_existe();
	}

	public function verificar_usuario($username, $password)
	{
		$query = $this->db
			->where('username', $username)
			->limit(1)
			->get('usuarios');

		$user = $query->row();
		if (!$user) {
			return FALSE;
		}

		return password_verify($password, $user->password) ? $user : FALSE;
	}

	public function obtener_todos()
	{
		return $this->db
			->select('id, username, nombre, creado_en')
			->order_by('id', 'DESC')
			->get('usuarios')
			->result();
	}

	public function crear_usuario($nombre, $username, $password)
	{
		return $this->db->insert('usuarios', array(
			'nombre' => $nombre,
			'username' => $username,
			'password' => password_hash($password, PASSWORD_BCRYPT)
		));
	}

	public function obtener_por_id($id)
	{
		return $this->db
			->where('id', (int) $id)
			->limit(1)
			->get('usuarios')
			->row();
	}

	public function existe_username_otro($username, $id_actual)
	{
		$row = $this->db
			->where('username', (string) $username)
			->where('id !=', (int) $id_actual)
			->limit(1)
			->get('usuarios')
			->row();
		return (bool) $row;
	}

	public function actualizar_usuario($id, $data)
	{
		return $this->db
			->where('id', (int) $id)
			->update('usuarios', $data);
	}

	public function eliminar_usuario($id)
	{
		return $this->db
			->where('id', (int) $id)
			->delete('usuarios');
	}

	private function crear_tabla_si_no_existe()
	{
		$sql = "CREATE TABLE IF NOT EXISTS usuarios (
			id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
			username VARCHAR(50) NOT NULL UNIQUE,
			password VARCHAR(255) NOT NULL,
			nombre VARCHAR(100) NOT NULL,
			creado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP
		) ENGINE=InnoDB DEFAULT CHARSET=utf8";

		$this->db->query($sql);

		$exists = $this->db->where('username', 'admin')->get('usuarios')->row();
		if (!$exists) {
			$this->db->insert('usuarios', array(
				'username' => 'admin',
				'password' => password_hash('admin123', PASSWORD_BCRYPT),
				'nombre' => 'Administrador'
			));
		}
	}
}
