// Path: src/main/java/com/kazale/pontointeligente/api/dtos/EmpresaDto.java
// public class EmpresaDto {
// 	
// 	private Long id;
// 	private String razaoSocial;
// 	private String cnpj;
// 
// 	public EmpresaDto() {
// 	}
// 
// 	public Long getId() {
// 		return id;
// 	}
// 
// 	public void setId(Long id) {
// 		this.id = id;
// 	}
// 
// 	public String getRazaoSocial() {
// 		return razaoSocial;
// 	}
// 
// 	public void setRazaoSocial(String razaoSocial) {
// 		this.razaoSocial = razaoSocial;
// 	}
// 
// 	public String getCnpj() {
// 		return cnpj;
// 	}
// 
// 	public void setCnpj(String cnpj) {
// 		this.cnpj = cnpj;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "EmpresaDto [id=" + id + ", razaoSocial=" + razaoSocial + ", cnpj=" + cnpj + "]";
// 	}
// 
// }
// 
// Path: src/main/java/com/kazale/pontointeligente/api/response/Response.java
// public class Response<T> {
// 
// 	private T data;
// 	private List<String> errors;
// 
// 	public Response() {
// 	}
// 
// 	public T getData() {
// 		return data;
// 	}
// 
// 	public void setData(T data) {
// 		this.data = data;
// 	}
// 
// 	public List<String> getErrors() {
// 		if (this.errors == null) {
// 			this.errors = new ArrayList<String>();
// 		}
// 		return errors;
// 	}
// 
// 	public void setErrors(List<String> errors) {
// 		this.errors = errors;
// 	}
// 
// }
// 
// Path: src/main/java/com/kazale/pontointeligente/api/services/EmpresaService.java
// public interface EmpresaService {
// 
// 	/**
// 	 * Retorna uma empresa dado um CNPJ.
// 	 * 
// 	 * @param cnpj
// 	 * @return Optional<Empresa>
// 	 */
// 	Optional<Empresa> buscarPorCnpj(String cnpj);
// 	
// 	/**
// 	 * Cadastra uma nova empresa na base de dados.
// 	 * 
// 	 * @param empresa
// 	 * @return Empresa
// 	 */
// 	Empresa persistir(Empresa empresa);
// 	
// }


import java.util.Optional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.kazale.pontointeligente.api.dtos.EmpresaDto;
import com.kazale.pontointeligente.api.entities.Empresa;
import com.kazale.pontointeligente.api.response.Response;
import com.kazale.pontointeligente.api.services.EmpresaService;
package com.kazale.pontointeligente.api.controllers;




@RestController
@RequestMapping("/api/empresas")
@CrossOrigin(origins = "*")
public class EmpresaController {

	private static final Logger log = LoggerFactory.getLogger(EmpresaController.class);

	@Autowired
	private EmpresaService empresaService;

	public EmpresaController() {
	}

	/**
	 * Retorna uma empresa dado um CNPJ.
	 * 
	 * @param cnpj
	 * @return ResponseEntity<Response<EmpresaDto>>
	 */
	@GetMapping(value = "/cnpj/{cnpj}")
	public ResponseEntity<Response<EmpresaDto>> buscarPorCnpj(@PathVariable("cnpj") String cnpj) {
		log.info("Buscando empresa por CNPJ: {}", cnpj);
		Response<EmpresaDto> response = new Response<EmpresaDto>();
		Optional<Empresa> empresa = empresaService.buscarPorCnpj(cnpj);

		if (!empresa.isPresent()) {
			log.info("Empresa não encontrada para o CNPJ: {}", cnpj);
			response.getErrors().add("Empresa não encontrada para o CNPJ " + cnpj);
			return ResponseEntity.badRequest().body(response);
		}

		response.setData(this.converterEmpresaDto(empresa.get()));
		return ResponseEntity.ok(response);
	}

	/**
	 * Popula um DTO com os dados de uma empresa.
	 * 
	 * @param empresa
	 * @return EmpresaDto
	 */
	private EmpresaDto converterEmpresaDto(Empresa empresa) {
		EmpresaDto empresaDto = new EmpresaDto();
		empresaDto.setId(empresa.getId());
		empresaDto.setCnpj(empresa.getCnpj());
		empresaDto.setRazaoSocial(empresa.getRazaoSocial());

// Path: src/main/java/com/kazale/pontointeligente/api/dtos/EmpresaDto.java
// public class EmpresaDto {
// 	
// 	private Long id;
// 	private String razaoSocial;
// 	private String cnpj;
// 
// 	public EmpresaDto() {
// 	}
// 
// 	public Long getId() {
// 		return id;
// 	}
// 
// 	public void setId(Long id) {
// 		this.id = id;
// 	}
// 
// 	public String getRazaoSocial() {
// 		return razaoSocial;
// 	}
// 
// 	public void setRazaoSocial(String razaoSocial) {
// 		this.razaoSocial = razaoSocial;
// 	}
// 
// 	public String getCnpj() {
// 		return cnpj;
// 	}
// 
// 	public void setCnpj(String cnpj) {
// 		this.cnpj = cnpj;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "EmpresaDto [id=" + id + ", razaoSocial=" + razaoSocial + ", cnpj=" + cnpj + "]";
// 	}
// 
// }
// 
// Path: src/main/java/com/kazale/pontointeligente/api/response/Response.java
// public class Response<T> {
// 
// 	private T data;
// 	private List<String> errors;
// 
// 	public Response() {
// 	}
// 
// 	public T getData() {
// 		return data;
// 	}
// 
// 	public void setData(T data) {
// 		this.data = data;
// 	}
// 
// 	public List<String> getErrors() {
// 		if (this.errors == null) {
// 			this.errors = new ArrayList<String>();
// 		}
// 		return errors;
// 	}
// 
// 	public void setErrors(List<String> errors) {
// 		this.errors = errors;
// 	}
// 
// }
// 
// Path: src/main/java/com/kazale/pontointeligente/api/services/EmpresaService.java
// public interface EmpresaService {
// 
// 	/**
// 	 * Retorna uma empresa dado um CNPJ.
// 	 * 
// 	 * @param cnpj
// 	 * @return Optional<Empresa>
// 	 */
// 	Optional<Empresa> buscarPorCnpj(String cnpj);
// 	
// 	/**
// 	 * Cadastra uma nova empresa na base de dados.
// 	 * 
// 	 * @param empresa
// 	 * @return Empresa
// 	 */
// 	Empresa persistir(Empresa empresa);
// 	
// }


// Path: src/main/java/com/kazale/pontointeligente/api/controllers/EmpresaController.java
import java.util.Optional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.kazale.pontointeligente.api.dtos.EmpresaDto;
import com.kazale.pontointeligente.api.entities.Empresa;
import com.kazale.pontointeligente.api.response.Response;
import com.kazale.pontointeligente.api.services.EmpresaService;

package com.kazale.pontointeligente.api.controllers;




@RestController
@RequestMapping("/api/empresas")
@CrossOrigin(origins = "*")
public class EmpresaController {

	private static final Logger log = LoggerFactory.getLogger(EmpresaController.class);

	@Autowired
	private EmpresaService empresaService;

	public EmpresaController() {
	}

	/**
	 * Retorna uma empresa dado um CNPJ.
	 * 
	 * @param cnpj
	 * @return ResponseEntity<Response<EmpresaDto>>
	 */
	@GetMapping(value = "/cnpj/{cnpj}")
	public ResponseEntity<Response<EmpresaDto>> buscarPorCnpj(@PathVariable("cnpj") String cnpj) {
		log.info("Buscando empresa por CNPJ: {}", cnpj);
		Response<EmpresaDto> response = new Response<EmpresaDto>();
		Optional<Empresa> empresa = empresaService.buscarPorCnpj(cnpj);

		if (!empresa.isPresent()) {
			log.info("Empresa não encontrada para o CNPJ: {}", cnpj);
			response.getErrors().add("Empresa não encontrada para o CNPJ " + cnpj);
			return ResponseEntity.badRequest().body(response);
		}

		response.setData(this.converterEmpresaDto(empresa.get()));
		return ResponseEntity.ok(response);
	}

	/**
	 * Popula um DTO com os dados de uma empresa.
	 * 
	 * @param empresa
	 * @return EmpresaDto
	 */
	private EmpresaDto converterEmpresaDto(Empresa empresa) {
		EmpresaDto empresaDto = new EmpresaDto();
		empresaDto.setId(empresa.getId());
		empresaDto.setCnpj(empresa.getCnpj());
		empresaDto.setRazaoSocial(empresa.getRazaoSocial());

		return empresaDto;