<?php

class CidadesController extends Controller
{
    private $cidadeModel;

    public function __construct()
    {
        if (!Sessao::estaLogado()) {
            URL::redirecionar('usuarios/login');
        }
        $this->cidadeModel = $this->model('Cidade');
    }

    public function index()
    {
        $dados = [
            'cidades' => $this->cidadeModel->lerCidades()
        ];
        $this->view('layout', [
            'conteudo' => __DIR__ . '/../Views/cidades/index.php',
            'dados'    => $dados
        ]);
    }

    public function cadastrar()
    {
        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
            $formulario = filter_input_array(INPUT_POST, FILTER_SANITIZE_SPECIAL_CHARS);

            $dados = [
                'nome'       => strtoupper($formulario['nome'] ?? ''),
                'estado'     => strtoupper($formulario['estado'] ?? ''),
                'id_regioes' => $formulario['id_regioes'] ?? null,
                'id_usuario' => $_SESSION['id_usuario'] ?? 1
            ];

            if ($this->cidadeModel->armazenar($dados)) {
                Sessao::mensagem('cidade', 'Cidade cadastrada com sucesso!');
                URL::redirecionar('cidades');
            } else {
                Sessao::mensagem('cidade', 'Erro ao cadastrar cidade', 'alert alert-danger');
            }
        }

        $dados = [
            'regioes' => $this->cidadeModel->lerRegioes()
        ];
        $this->view('layout', [
            'conteudo' => __DIR__ . '/../Views/cidades/cadastrar.php',
            'dados'    => $dados
        ]);
    }

    public function editar($id)
    {
        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
            $formulario = filter_input_array(INPUT_POST, FILTER_SANITIZE_SPECIAL_CHARS);

            $dados = [
                'id_cidade'  => $id,
                'nome'       => strtoupper($formulario['nome'] ?? ''),
                'estado'     => strtoupper($formulario['estado'] ?? ''),
                'id_regioes' => $formulario['id_regioes'] ?? null
            ];

            if ($this->cidadeModel->atualizar($dados)) {
                Sessao::mensagem('cidade', 'Cidade atualizada com sucesso!');
                URL::redirecionar('cidades');
            } else {
                Sessao::mensagem('cidade', 'Erro ao atualizar cidade', 'alert alert-danger');
            }
        }

        $cidade = $this->cidadeModel->lerCidadePorId($id);

        $dados = [
            'cidade'  => $cidade,
            'regioes' => $this->cidadeModel->lerRegioes()
        ];

        $this->view('layout', [
            'conteudo' => __DIR__ . '/../Views/cidades/editar.php',
            'dados'    => $dados
        ]);
    }

    public function visualizar($id)
    {
        $dados = [
            'cidade' => $this->cidadeModel->lerCidadePorId($id)
        ];
        $this->view('layout', [
            'conteudo' => __DIR__ . '/../Views/cidades/visualizar.php',
            'dados'    => $dados
        ]);
    }

    public function excluir($id)
    {
        if ($this->cidadeModel->remover($id)) {
            Sessao::mensagem('cidade', 'Cidade removida com sucesso!');
        } else {
            Sessao::mensagem('cidade', 'Erro ao remover cidade', 'alert alert-danger');
        }
        URL::redirecionar('cidades');
    }

    // Método AJAX para retornar o estado da cidade
    public function getEstado()
    {
        if ($_SERVER['REQUEST_METHOD'] === 'POST') {
            $id_cidade = filter_input(INPUT_POST, 'id_cidade', FILTER_VALIDATE_INT);

            if ($id_cidade) {
                $id_estado = $this->cidadeModel->getEstadoByCidade($id_cidade);

                header('Content-Type: application/json');
                echo json_encode(['id_estado' => $id_estado]);
                exit;
            }
        }

        http_response_code(400);
        echo json_encode(['error' => 'Requisição inválida']);
        exit;
    }
}
