-- ===============================================================================================================
-- Status da Empresa
-- ===============================================================================================================
CREATE TABLE IF NOT EXISTS public.empresa_status (
    id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    descricao VARCHAR(255) NOT NULL
);

INSERT INTO public.empresa_status (id, descricao) VALUES
(1, 'Ativa'),
(2, 'Inativa'),
(3, 'Pendente'),
(4, 'Suspensa');

SELECT setval(pg_get_serial_sequence('public.empresa_status','id'), (SELECT MAX(id) FROM public.empresa_status));

-- ===============================================================================================================
-- Empresa Tipo Unidade
-- ===============================================================================================================
CREATE TABLE IF NOT EXISTS public.empresa_tipo_unidade (
    id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    descricao VARCHAR(255) NOT NULL
);

INSERT INTO public.empresa_tipo_unidade (id, descricao) VALUES
(1, 'Matriz'),
(2, 'Filial');

SELECT setval(pg_get_serial_sequence('public.empresa_tipo_unidade','id'), (SELECT MAX(id) FROM public.empresa_tipo_unidade));

-- ===============================================================================================================
-- Empresa
-- ===============================================================================================================
CREATE TABLE IF NOT EXISTS public.empresa (
    id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    uuid UUID NOT NULL UNIQUE,
    status_id BIGINT NOT NULL DEFAULT 1 REFERENCES public.empresa_status(id) ON UPDATE CASCADE ON DELETE RESTRICT,

    -- Dados da Empresa
    tipo_unidade_id BIGINT NOT NULL DEFAULT 1 REFERENCES public.empresa_tipo_unidade(id) ON UPDATE CASCADE ON DELETE RESTRICT,
    razao_social VARCHAR(255) NOT NULL,
    nome_fantasia VARCHAR(255) DEFAULT NULL,
    inscricao_tipo_id BIGINT DEFAULT 1 NOT NULL REFERENCES esocial.tab_05(id) ON UPDATE CASCADE ON DELETE RESTRICT,
    document_inscricao VARCHAR(20) NOT NULL UNIQUE,
    inscricao_raiz VARCHAR(20) NOT NULL,

    -- Endereço
    endereco_codigo_ibge BIGINT DEFAULT NULL,
    endereco_cep VARCHAR(10) DEFAULT NULL,
    endereco_logradouro VARCHAR(255) DEFAULT NULL,
    endereco_numero VARCHAR(20) DEFAULT NULL,
    endereco_complemento VARCHAR(255) DEFAULT NULL,
    endereco_bairro VARCHAR(100) DEFAULT NULL,
    endereco_cidade VARCHAR(100) DEFAULT NULL,
    endereco_estado VARCHAR(2) DEFAULT NULL,

    -- Contato
    contato_email VARCHAR(255) DEFAULT NULL,
    contato_celular VARCHAR(20) DEFAULT NULL,
    contato_telefone VARCHAR(20) DEFAULT NULL,
    responsavel_nome VARCHAR(255) DEFAULT NULL,
    responsavel_cargo VARCHAR(100) DEFAULT NULL,
    responsavel_email VARCHAR(255) DEFAULT NULL,
    responsavel_telefone VARCHAR(20) DEFAULT NULL,
    responsavel_document_cpf CHAR(11) DEFAULT NULL,

    -- Metadados
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT NULL,
    deleted_at TIMESTAMP DEFAULT NULL
);

INSERT INTO public.empresa (uuid, razao_social, nome_fantasia, inscricao_tipo_id, document_inscricao, inscricao_raiz, endereco_codigo_ibge, endereco_cep, endereco_logradouro, endereco_numero, endereco_complemento, endereco_bairro, endereco_cidade, endereco_estado) VALUES
('019a07d3-9174-76b6-a9f0-9e0e189fdba8', 'Ativa Servicos em Refrigeracao e Servicos em Eletrica LTDA', 'Ativa Refrigeração e Elétrica', 1, '61365393000121', '61365393', '2304400', '60115191', 'Rua Monesenhor Bruno', '1153', 'Sala 1423', 'Aldeota', 'Fortaleza', 'CE'),
('019a07d3-9174-7879-93ae-4de7da3b5a93', 'A C C Andrade LTDA', 'A.c. Car', 1, '21899523000191', '21899523', '2307601', '62930000', 'Rua Leila Kristinna Lopes Maia', '58', NULL, 'Limoeirinho', 'Limoeiro do Norte', 'CE');

-- ===============================================================================================================
-- Empresa Certificado Digital
-- ===============================================================================================================
CREATE TABLE IF NOT EXISTS public.empresa_certificado_digital (
    id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    uuid UUID NOT NULL UNIQUE,

    -- Dados do Certificado Digital
    tipo_certificado CHAR(2) NOT NULL DEFAULT 'A1',
    distinguished_name VARCHAR(255) NOT NULL,
    categoria_certificado VARCHAR(100) NOT NULL DEFAULT 'e-CNPJ',
    issued_in TIMESTAMP NOT NULL,
    expires_in TIMESTAMP NOT NULL,
    file_path TEXT DEFAULT NULL,
    file_hash CHAR(64) DEFAULT NULL,
    senha_hash TEXT DEFAULT NULL,
    pin_hash TEXT DEFAULT NULL,
    numero_serie VARCHAR(100) NOT NULL UNIQUE,

    -- Metadados
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT NULL,
    deleted_at TIMESTAMP DEFAULT NULL
);

-- ===============================================================================================================
-- Empresa Certificado
-- ===============================================================================================================
CREATE TABLE IF NOT EXISTS public.empresa_has_certificado_digital (
    empresa_id BIGINT NOT NULL REFERENCES public.empresa(id) ON UPDATE CASCADE ON DELETE CASCADE,
    certificado_digital_id BIGINT NOT NULL REFERENCES public.empresa_certificado_digital(id) ON UPDATE CASCADE ON DELETE CASCADE,
    PRIMARY KEY (empresa_id, certificado_digital_id)
);