-- CreateTable
CREATE TABLE `users` (
    `id` VARCHAR(36) NOT NULL,
    `email` VARCHAR(255) NOT NULL,
    `name` VARCHAR(255) NULL,
    `password_hash` VARCHAR(255) NOT NULL,
    `role` ENUM('admin', 'client') NOT NULL,
    `created_at` DATETIME(3) NOT NULL,
    `system_user` BOOLEAN NOT NULL DEFAULT false,

    UNIQUE INDEX `users_email_key`(`email`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `empresas` (
    `id` VARCHAR(36) NOT NULL,
    `cnpj` VARCHAR(14) NOT NULL,
    `fantasia` VARCHAR(512) NOT NULL,
    `logo` TEXT NOT NULL,
    `telefone` VARCHAR(64) NOT NULL,
    `endereco` JSON NOT NULL,
    `updated_at` DATETIME(3) NOT NULL,

    UNIQUE INDEX `empresas_cnpj_key`(`cnpj`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `clientes` (
    `id` VARCHAR(36) NOT NULL,
    `user_id` VARCHAR(36) NOT NULL,
    `name` VARCHAR(255) NOT NULL,
    `domain` VARCHAR(255) NOT NULL,
    `created_at` DATETIME(3) NOT NULL,
    `empresa_id` VARCHAR(36) NULL,

    INDEX `clientes_empresa_id_idx`(`empresa_id`),
    UNIQUE INDEX `clientes_user_id_domain_key`(`user_id`, `domain`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `user_empresas` (
    `user_id` VARCHAR(36) NOT NULL,
    `empresa_id` VARCHAR(36) NOT NULL,
    `created_at` DATETIME(3) NOT NULL,

    INDEX `user_empresas_empresa_id_idx`(`empresa_id`),
    PRIMARY KEY (`user_id`, `empresa_id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `faturamento_movimentos` (
    `id` VARCHAR(36) NOT NULL,
    `empresa_id` VARCHAR(36) NOT NULL,
    `external_id` INTEGER NOT NULL,
    `valor` DECIMAL(14, 4) NULL,
    `forma_pagamento` VARCHAR(255) NULL,
    `created_at` DATETIME(3) NOT NULL,
    `pagamento_confirmado` INTEGER NOT NULL,

    INDEX `faturamento_movimentos_empresa_id_created_at_idx`(`empresa_id`, `created_at`),
    UNIQUE INDEX `faturamento_movimentos_empresa_id_external_id_key`(`empresa_id`, `external_id`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `empresa_metric_sync` (
    `empresa_id` VARCHAR(36) NOT NULL,
    `faturamento_cursor_after` DATETIME(3) NULL,
    `faturamento_seed_complete` BOOLEAN NOT NULL DEFAULT false,
    `ticket_medio_cursor_after` DATETIME(3) NULL,
    `updated_at` DATETIME(3) NOT NULL,

    PRIMARY KEY (`empresa_id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `ticket_medio_snapshots` (
    `id` VARCHAR(36) NOT NULL,
    `empresa_id` VARCHAR(36) NOT NULL,
    `after_iso` DATETIME(3) NOT NULL,
    `synced_at` DATETIME(3) NOT NULL,
    `ticket_medio` DECIMAL(14, 4) NOT NULL,
    `total_vendas` DECIMAL(14, 4) NOT NULL,
    `total_clientes` INTEGER NOT NULL,
    `qtd_pedidos` INTEGER NOT NULL,
    `media_atendimento` DECIMAL(14, 4) NOT NULL,
    `tipo_atendimento` INTEGER NULL,

    INDEX `ticket_medio_snapshots_empresa_id_synced_at_idx`(`empresa_id`, `synced_at`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- AddForeignKey
ALTER TABLE `clientes` ADD CONSTRAINT `clientes_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `clientes` ADD CONSTRAINT `clientes_empresa_id_fkey` FOREIGN KEY (`empresa_id`) REFERENCES `empresas`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `user_empresas` ADD CONSTRAINT `user_empresas_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `user_empresas` ADD CONSTRAINT `user_empresas_empresa_id_fkey` FOREIGN KEY (`empresa_id`) REFERENCES `empresas`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `faturamento_movimentos` ADD CONSTRAINT `faturamento_movimentos_empresa_id_fkey` FOREIGN KEY (`empresa_id`) REFERENCES `empresas`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `empresa_metric_sync` ADD CONSTRAINT `empresa_metric_sync_empresa_id_fkey` FOREIGN KEY (`empresa_id`) REFERENCES `empresas`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `ticket_medio_snapshots` ADD CONSTRAINT `ticket_medio_snapshots_empresa_id_fkey` FOREIGN KEY (`empresa_id`) REFERENCES `empresas`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
