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

class Compras extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();

		if ($this->session->userdata('logged_in') !== TRUE) {
			redirect('login');
		}

		$this->load->model('Compras_model');
		$this->load->model('App_config_model');
	}

	public function index()
	{
		$data['materiales'] = $this->Compras_model->obtener_materiales();
		$compras_raw = $this->Compras_model->obtener_compras();
		$grupos = array();

		foreach ($compras_raw as $row) {
			$ref = (string) $row->compra_ref;
			if (!isset($grupos[$ref])) {
				$grupos[$ref] = array(
					'compra_ref' => $ref,
					'proveedor' => $row->proveedor,
					'fecha' => $row->creado_en,
					'monto_total' => 0,
					'items' => array()
				);
			}

			$subtotal = ((int) $row->cantidad) * ((float) $row->costo_unitario);
			$grupos[$ref]['monto_total'] += $subtotal;
			$grupos[$ref]['items'][] = $row;
		}

		$data['compras_grupo'] = array_values($grupos);
		$data['app_config'] = $this->App_config_model->obtener();
		$this->load->view('compras/index', $data);
	}

	public function guardar()
	{
		$proveedor = trim((string) $this->input->post('proveedor', TRUE));
		$material_ids = (array) $this->input->post('material_id');
		$cantidades = (array) $this->input->post('cantidad');
		$costos = (array) $this->input->post('costo_unitario');

		if ($proveedor === '') {
			$this->session->set_flashdata('error', 'Debes indicar el nombre del proveedor.');
			redirect('compras');
		}

		if (empty($material_ids)) {
			$this->session->set_flashdata('error', 'Debes agregar al menos un material en la compra.');
			redirect('compras');
		}

		$items = array();
		foreach ($material_ids as $idx => $material_id) {
			$mat = (int) $material_id;
			$cant = isset($cantidades[$idx]) ? (int) $cantidades[$idx] : 0;
			$cost = isset($costos[$idx]) ? (float) $costos[$idx] : -1;

			if ($mat <= 0 || $cant <= 0 || $cost < 0) {
				$this->session->set_flashdata('error', 'Hay lineas de compra invalidas. Revisa material, cantidad y costo.');
				redirect('compras');
			}

			$items[] = array(
				'material_id' => $mat,
				'cantidad' => $cant,
				'costo_unitario' => $cost
			);
		}

		$ok = $this->Compras_model->registrar_compra_multiple($proveedor, $items);
		if ($ok) {
			$this->session->set_flashdata('ok', 'Compra registrada correctamente. Inventario actualizado.');
		} else {
			$this->session->set_flashdata('error', 'No se pudo registrar la compra.');
		}

		redirect('compras');
	}
}
