-- ============================================================
-- KopierSFlow ERP — 007_seeders.sql
-- Importar SÉPTIMO (último) en phpMyAdmin
-- ============================================================

-- ── Empresa demo ─────────────────────────────────────────────
INSERT INTO companies (id, name, legal_name, ein, city, state, zip, phone, email, base_currency, language, is_active)
VALUES (1, 'Mi Distribuidora LLC', 'Mi Distribuidora LLC', '12-3456789',
        'Miami', 'FL', '33101', '(305) 555-0100', 'admin@midistr.com', 'USD', 'es', 1);

-- ── Usuario administrador ─────────────────────────────────────
-- Password: KFlow2025!  (cambia esto INMEDIATAMENTE después del primer login)
-- Hash generado con: password_hash('KFlow2025!', PASSWORD_ARGON2ID)
INSERT INTO users (id, name, email, password_hash, is_superadmin, is_active)
VALUES (1, 'Administrador', 'admin@kopierflow.com',
        '$argon2id$v=19$m=65536,t=4,p=2$c29tZXNhbHQ$RdescudvJCR2sqzGm8ZV7cJjDqgwMUCVXEiBNqmhbvo',
        1, 1);

-- ── Roles del sistema ─────────────────────────────────────────
INSERT INTO roles (company_id, name, description, is_system) VALUES
(1, 'Administrador',    'Acceso completo a todos los módulos y configuración', 1),
(1, 'Contador',         'Contabilidad completa, AR, AP, reportes, conciliación', 1),
(1, 'Gerente Ventas',   'Órdenes, facturas, clientes, precios', 1),
(1, 'Vendedor',         'Cotizaciones, órdenes, solo vista de clientes', 1),
(1, 'Almacén',          'Inventario, WMS, picking, recepción', 1),
(1, 'Repartidor',       'Solo acceso a app móvil — tareas de entrega', 1),
(1, 'Compras',          'Órdenes de compra, proveedores, importaciones', 1),
(1, 'Gerente General',  'Ver todos los reportes, aprobar descuentos y POs', 1),
(1, 'Solo Lectura',     'Acceso de solo lectura a todos los módulos', 1);

-- ── Asignar admin a empresa ───────────────────────────────────
INSERT INTO user_companies (user_id, company_id, role_id, is_default)
VALUES (1, 1, 1, 1);

-- ── Permisos ─────────────────────────────────────────────────
INSERT INTO permissions (module, action, description) VALUES
('accounting',   'view',      'Ver libro mayor, asientos, reportes financieros'),
('accounting',   'edit',      'Crear/editar asientos manuales y ajustes'),
('accounting',   'close',     'Cerrar períodos contables y años fiscales'),
('ar',           'view',      'Ver facturas AR y aging'),
('ar',           'create',    'Crear y finalizar facturas'),
('ar',           'edit',      'Editar facturas en borrador'),
('ar',           'payment',   'Registrar cobros de clientes'),
('ar',           'void',      'Anular facturas y notas de crédito'),
('ap',           'view',      'Ver bills AP y aging'),
('ap',           'create',    'Crear bills de proveedores'),
('ap',           'payment',   'Registrar pagos a proveedores'),
('bank',         'view',      'Ver cuentas bancarias y transacciones'),
('bank',         'reconcile', 'Hacer conciliación bancaria'),
('invoices',     'view',      'Ver todas las facturas'),
('invoices',     'create',    'Crear nuevas facturas'),
('invoices',     'edit',      'Editar facturas en borrador'),
('invoices',     'send',      'Enviar facturas a clientes'),
('invoices',     'void',      'Anular facturas'),
('sales_orders', 'view',      'Ver órdenes de venta'),
('sales_orders', 'create',    'Crear órdenes de venta'),
('sales_orders', 'approve',   'Aprobar órdenes sobre límite de crédito'),
('quotes',       'view',      'Ver cotizaciones'),
('quotes',       'create',    'Crear y enviar cotizaciones'),
('customers',    'view',      'Ver clientes'),
('customers',    'create',    'Crear nuevos clientes'),
('customers',    'edit',      'Editar clientes'),
('customers',    'delete',    'Archivar/eliminar clientes'),
('pricing',      'view',      'Ver listas de precios y promociones'),
('pricing',      'edit',      'Editar precios y promociones'),
('pricing',      'approve',   'Aprobar descuentos bajo margen mínimo'),
('inventory',    'view',      'Ver balances y movimientos de inventario'),
('inventory',    'adjust',    'Crear ajustes manuales de inventario'),
('inventory',    'receive',   'Recibir órdenes de compra en inventario'),
('inventory',    'transfer',  'Transferencias entre almacenes'),
('inventory',    'count',     'Hacer y postear conteos de ciclo'),
('lots',         'view',      'Ver lotes y fechas de vencimiento'),
('lots',         'edit',      'Editar registros de lotes'),
('recall',       'manage',    'Iniciar y gestionar eventos de recall'),
('purchasing',   'view',      'Ver órdenes de compra y proveedores'),
('purchasing',   'create',    'Crear órdenes de compra'),
('purchasing',   'approve',   'Aprobar POs sobre límite'),
('vendors',      'view',      'Ver proveedores'),
('vendors',      'edit',      'Editar proveedores'),
('imports',      'view',      'Ver embarques e importaciones'),
('imports',      'edit',      'Editar importaciones y landed costs'),
('landed_cost',  'post',      'Postear landed cost al inventario'),
('routes',       'view',      'Ver rutas y tareas de entrega'),
('routes',       'edit',      'Crear y editar rutas'),
('deliveries',   'view',      'Ver estado de entregas'),
('deliveries',   'manage',    'Despachar y gestionar entregas'),
('fleet',        'view',      'Ver vehículos y mantenimiento'),
('fleet',        'edit',      'Editar vehículos y órdenes de trabajo'),
('crm',          'view',      'Ver historial e interacciones de clientes'),
('crm',          'edit',      'Crear interacciones, notas, quejas'),
('loyalty',      'view',      'Ver cuentas y transacciones de fidelización'),
('loyalty',      'edit',      'Ajustar puntos de fidelización'),
('campaigns',    'view',      'Ver campañas de marketing'),
('campaigns',    'send',      'Enviar campañas email/SMS'),
('reports',      'view',      'Ejecutar reportes financieros y operativos'),
('reports',      'export',    'Exportar reportes a PDF/Excel'),
('users',        'view',      'Ver usuarios'),
('users',        'edit',      'Crear y editar usuarios'),
('roles',        'edit',      'Gestionar roles y permisos'),
('settings',     'edit',      'Editar configuración de la empresa'),
('audit_logs',   'view',      'Ver auditoría y logs de acceso');

-- ── Plan de Cuentas ──────────────────────────────────────────
INSERT INTO chart_of_accounts (company_id, code, name, type, subtype, normal_balance, is_system, is_active) VALUES
-- ACTIVOS
(1,'1010','Cash - Operating Bank',    'asset','cash',      'debit',  1,1),
(1,'1020','Cash - Savings',           'asset','cash',      'debit',  1,1),
(1,'1030','Undeposited Funds',        'asset','cash',      'debit',  1,1),
(1,'1100','Accounts Receivable',      'asset','receivable','debit',  1,1),
(1,'1200','Inventory',                'asset','inventory', 'debit',  1,1),
(1,'1210','Inventory - Dry Goods',    'asset','inventory', 'debit',  1,1),
(1,'1220','Inventory - Refrigerated', 'asset','inventory', 'debit',  1,1),
(1,'1230','Inventory - Frozen',       'asset','inventory', 'debit',  1,1),
(1,'1300','Prepaid Expenses',         'asset',NULL,        'debit',  0,1),
(1,'1400','Deposits',                 'asset',NULL,        'debit',  0,1),
(1,'1500','Fixed Assets',             'asset','fixed',     'debit',  0,1),
(1,'1510','Vehicles',                 'asset','fixed',     'debit',  0,1),
(1,'1520','Warehouse Equipment',      'asset','fixed',     'debit',  0,1),
(1,'1590','Accumulated Depreciation', 'asset','fixed',     'credit', 1,1),
-- PASIVOS
(1,'2000','Accounts Payable',         'liability','payable','credit', 1,1),
(1,'2100','Credit Cards Payable',     'liability',NULL,    'credit', 0,1),
(1,'2200','Sales Tax Payable',        'liability','tax',   'credit', 1,1),
(1,'2300','Payroll Liabilities',      'liability',NULL,    'credit', 0,1),
(1,'2400','Import Duties Payable',    'liability',NULL,    'credit', 1,1),
(1,'2500','Loans Payable',            'liability',NULL,    'credit', 0,1),
-- PATRIMONIO
(1,'3000','Owner Equity',             'equity',NULL,       'credit', 1,1),
(1,'3100','Retained Earnings',        'equity',NULL,       'credit', 1,1),
(1,'3200','Current Year Earnings',    'equity',NULL,       'credit', 1,1),
-- INGRESOS
(1,'4000','Product Sales',            'revenue',NULL,      'credit', 1,1),
(1,'4010','Delivery Income',          'revenue',NULL,      'credit', 0,1),
(1,'4020','Discounts Given',          'revenue',NULL,      'debit',  0,1),
(1,'4030','Returns and Allowances',   'revenue',NULL,      'debit',  0,1),
-- COSTO DE VENTAS
(1,'5000','Cost of Goods Sold',       'cogs',NULL,         'debit',  1,1),
(1,'5010','Freight In',               'cogs',NULL,         'debit',  1,1),
(1,'5020','Customs Duties',           'cogs',NULL,         'debit',  1,1),
(1,'5030','Broker Fees',              'cogs',NULL,         'debit',  1,1),
(1,'5040','Landed Cost Adjustments',  'cogs',NULL,         'credit', 1,1),
(1,'5050','Inventory Shrinkage',      'cogs',NULL,         'debit',  1,1),
-- GASTOS OPERATIVOS
(1,'6000','Rent',                     'expense',NULL,      'debit',  0,1),
(1,'6100','Payroll',                  'expense',NULL,      'debit',  0,1),
(1,'6200','Fuel',                     'expense',NULL,      'debit',  0,1),
(1,'6300','Vehicle Maintenance',      'expense',NULL,      'debit',  0,1),
(1,'6400','Insurance',                'expense',NULL,      'debit',  0,1),
(1,'6500','Merchant Fees',            'expense',NULL,      'debit',  1,1),
(1,'6600','Software',                 'expense',NULL,      'debit',  0,1),
(1,'6700','Marketing',                'expense',NULL,      'debit',  0,1),
(1,'6800','Utilities',                'expense',NULL,      'debit',  0,1),
(1,'6900','Professional Fees',        'expense',NULL,      'debit',  0,1);

-- ── Tax Rates (estados con nexo inicial) ─────────────────────
INSERT INTO tax_rates (company_id, name, state, rate, nexus, is_active) VALUES
(1, 'Florida State',       'FL', 0.06000, 1, 1),
(1, 'Miami-Dade County',   'FL', 0.01000, 1, 1),
(1, 'New York State',      'NY', 0.04000, 1, 1),
(1, 'NYC Local',           'NY', 0.04500, 1, 1),
(1, 'New Jersey',          'NJ', 0.06625, 1, 1),
(1, 'Texas',               'TX', 0.06250, 0, 1),
(1, 'California',          'CA', 0.07250, 0, 1),
(1, 'Georgia',             'GA', 0.04000, 0, 1),
(1, 'Pennsylvania',        'PA', 0.06000, 0, 1);

-- ── Año fiscal y períodos 2025-2026 ──────────────────────────
INSERT INTO fiscal_years (company_id, name, start_date, end_date, status) VALUES
(1, 'FY2025', '2025-01-01', '2025-12-31', 'open'),
(1, 'FY2026', '2026-01-01', '2026-12-31', 'open');

INSERT INTO accounting_periods (company_id, fiscal_year_id, name, start_date, end_date, status) VALUES
(1,1,'Enero 2025',    '2025-01-01','2025-01-31','closed'),
(1,1,'Febrero 2025',  '2025-02-01','2025-02-28','closed'),
(1,1,'Marzo 2025',    '2025-03-01','2025-03-31','closed'),
(1,1,'Abril 2025',    '2025-04-01','2025-04-30','closed'),
(1,1,'Mayo 2025',     '2025-05-01','2025-05-31','closed'),
(1,1,'Junio 2025',    '2025-06-01','2025-06-30','closed'),
(1,1,'Julio 2025',    '2025-07-01','2025-07-31','closed'),
(1,1,'Agosto 2025',   '2025-08-01','2025-08-31','closed'),
(1,1,'Septiembre 2025','2025-09-01','2025-09-30','closed'),
(1,1,'Octubre 2025',  '2025-10-01','2025-10-31','closed'),
(1,1,'Noviembre 2025','2025-11-01','2025-11-30','closed'),
(1,1,'Diciembre 2025','2025-12-01','2025-12-31','closed'),
(1,2,'Enero 2026',    '2026-01-01','2026-01-31','open'),
(1,2,'Febrero 2026',  '2026-02-01','2026-02-28','open'),
(1,2,'Marzo 2026',    '2026-03-01','2026-03-31','open'),
(1,2,'Abril 2026',    '2026-04-01','2026-04-30','open'),
(1,2,'Mayo 2026',     '2026-05-01','2026-05-31','open'),
(1,2,'Junio 2026',    '2026-06-01','2026-06-30','open'),
(1,2,'Julio 2026',    '2026-07-01','2026-07-31','open'),
(1,2,'Agosto 2026',   '2026-08-01','2026-08-31','open'),
(1,2,'Septiembre 2026','2026-09-01','2026-09-30','open'),
(1,2,'Octubre 2026',  '2026-10-01','2026-10-31','open'),
(1,2,'Noviembre 2026','2026-11-01','2026-11-30','open'),
(1,2,'Diciembre 2026','2026-12-01','2026-12-31','open');

-- ── Almacén principal ─────────────────────────────────────────
INSERT INTO warehouses (company_id, code, name, city, state, has_dry, has_refrigerated, has_frozen, is_active)
VALUES (1, 'WH01', 'Almacén Principal Miami', 'Miami', 'FL', 1, 1, 1, 1);

-- ── Programa de fidelización ──────────────────────────────────
INSERT INTO loyalty_programs (company_id, name, points_per_dollar, dollar_per_point, is_active)
VALUES (1, 'KopierRewards', 1.0, 0.01, 1);
