<?php

namespace App\DAO;

use App\DAO\DAO;
use App\DAO\DAOResponse\DAOResponse;
use App\DAO\DAOResponse\DAOResponseInterface;
use App\Utils\DateUtils;

class LojaCompraItemDAO extends DAO {

	public function registerItensCompra(int $idcompra, int $idusuario, array $produtos): DAOResponse {

		$sql = <<<SQL
			insert into loja_compra_item
				(id_loja_compra, id_loja_produto, quantidade, valor_unidade, valor, id_usuario, data_criacao, hora_criacao)
			values
				(:loja_compra_id:, :loja_produto_id:, :quant: , :valor_u:,  :valor:, :usuario_id:, :data_c:, :hora_c:)
		SQL;

		$binds = [ ];

		$incluidos = [ ];

		$daoResponse = new DAOResponse();
		$conn = db_connect();

		foreach ( $produtos as $produto ) {
			$binds = [ 
				'loja_compra_id' => $idcompra,
				'loja_produto_id' => $produto->getIdLojaProduto(),
				'quant' => $produto->getQuantidade(),
				'valor_u' => number_format( $produto->getValorUnidade(), 2, ".", "" ),
				'valor' => number_format( $produto->getValor(), 2, ".", "" ),
				'usuario_id' => $idusuario,
				'data_c' => DateUtils::today(),
				'hora_c' => DateUtils::now_time()
			];

			$result = $conn->query( $sql, $binds )->numRows;

			$errors = $conn->error();
			if ($errors ['code'] != 0) {
				$daoResponse->setStatus( DAOResponseInterface::DATABASE_CONNECTION_ERROR );
				$daoResponse->setErrors( $errors );
				$daoResponse->setData( [ ] );
				return $daoResponse;
			} else {
				$affectrows = $conn->affectedRows();
				if ($affectrows == 0) {
					$daoResponse->setStatus( DAOResponseInterface::INSUFFICIENT_DATA );
					$daoResponse->setData( [ ] );
					return $daoResponse;
				} else {
					$newid = $conn->insertID();
					array_push( $incluidos, $newid );
					$daoResponse->setStatus( DAOResponseInterface::SUCESS );
					$daoResponse->setData( [ 
						'items' => $incluidos
					] );
				}
			}
		}

		return $daoResponse;

	}

	public function excluirItemsByCompraId(int $idcompra): DAOResponse {

		$sql = <<<SQL
			delete from loja_compra_item
			where  id_loja_compra  = :loja_compra_id:
		SQL;

		$binds = [ 
			'loja_compra_id' => $idcompra
		];

		$daoResponse = new DAOResponse();
		$conn = db_connect();
		$result = $conn->query( $sql, $binds )->numRows;
		$errors = $conn->error();

		if ($errors ['code'] != 0) {
			$daoResponse->setStatus( DAOResponseInterface::DATABASE_CONNECTION_ERROR );
			$daoResponse->setErrors( $errors );
			$daoResponse->setData( [ ] );
		} else {
			$affectrows = $conn->affectedRows();
			if ($affectrows == 0) {
				$daoResponse->setStatus( DAOResponseInterface::INSUFFICIENT_DATA );
				$daoResponse->setData( [ ] );
			} else {
				$daoResponse->setStatus( DAOResponseInterface::SUCESS );
				$daoResponse->setData( [ ] );
			}
		}

		return $daoResponse;

	}

}

