-- USERS
INSERT INTO users (
    user_email,
    user_password,
    user_full_name,
    user_code,
    user_language,
    id_rol,
    user_verification_status,
    user_avatar,
    color,
    user_first_seen
)
SELECT 
    'pruebalogo@gmail.com',
    '$2y$12$Pzn4ncCWSeUUjrvZ9iyBZedKtP7lLS.C1hZbQZNBCvDdg2SXI5MzK',
    'prueba logo s.l',
    SUBSTRING(MD5(RAND()),1,24),
    user_language,
    id_rol,
    user_verification_status,
    user_avatar,
    color,
    '1751375160'
FROM users
WHERE user_email = 'yosoyrubens@gmail.com'
AND NOT EXISTS (SELECT 1 FROM users WHERE user_email = 'pruebalogo@gmail.com');

-- USER_PERMISO
INSERT INTO user_permiso (user_id, folder_id)
SELECT
    (SELECT user_id FROM users WHERE user_email = 'pruebalogo@gmail.com'),
    up.folder_id
FROM user_permiso up
JOIN users u ON u.user_id = up.user_id
WHERE u.user_email = 'yosoyrubens@gmail.com'
AND NOT EXISTS (
    SELECT 1 FROM user_permiso up2
    WHERE up2.user_id = (SELECT user_id FROM users WHERE user_email = 'pruebalogo@gmail.com')
      AND up2.folder_id = up.folder_id
);

-- ACTIVIDAD
INSERT INTO actividad (actividad, ip, user_id, fecha)
SELECT
    CONCAT('Alta de usuario: ', 'pruebalogo@gmail.com'),
    '127.0.0.1',
    u.user_id,
    NOW()
FROM users u
WHERE u.user_email = 'pruebalogo@gmail.com'
AND NOT EXISTS (
    SELECT 1 FROM actividad a
    WHERE a.user_id = u.user_id
      AND a.actividad LIKE 'Alta de usuario:%'
);
-- --------------------------------------------------------
-- E M P L E A D O S  (Generados automáticamente, nombres únicos)
-- --------------------------------------------------------
INSERT INTO `empleados` (`nombre`, `dni`, `telefono`, `direccion`)
SELECT 'Carlos Martínez', '79688823X', '601566358', 'Camino Real, 196, Madrid'
WHERE NOT EXISTS (SELECT 1 FROM `empleados` WHERE `dni` = '79688823X');
INSERT INTO `empleados` (`nombre`, `dni`, `telefono`, `direccion`)
SELECT 'Sofía Martínez', '41735368M', '742648958', 'Plaza España, 69, Sevilla'
WHERE NOT EXISTS (SELECT 1 FROM `empleados` WHERE `dni` = '41735368M');
INSERT INTO `empleados` (`nombre`, `dni`, `telefono`, `direccion`)
SELECT 'Sofía Sánchez', '70859695F', '756468203', 'Ronda Norte, 14, Madrid'
WHERE NOT EXISTS (SELECT 1 FROM `empleados` WHERE `dni` = '70859695F');
INSERT INTO `empleados` (`nombre`, `dni`, `telefono`, `direccion`)
SELECT 'Sofía García', '18634257W', '626619454', 'Ronda Norte, 92, Bilbao'
WHERE NOT EXISTS (SELECT 1 FROM `empleados` WHERE `dni` = '18634257W');
INSERT INTO `empleados` (`nombre`, `dni`, `telefono`, `direccion`)
SELECT 'Pablo Ruiz', '66793055C', '604618953', 'Paseo del Prado, 80, Sevilla'
WHERE NOT EXISTS (SELECT 1 FROM `empleados` WHERE `dni` = '66793055C');
INSERT INTO `empleados` (`nombre`, `dni`, `telefono`, `direccion`)
SELECT 'Lucía Pérez', '81784192X', '672544413', 'Paseo del Prado, 70, Barcelona'
WHERE NOT EXISTS (SELECT 1 FROM `empleados` WHERE `dni` = '81784192X');
INSERT INTO `empleados` (`nombre`, `dni`, `telefono`, `direccion`)
SELECT 'Carmen Pérez', '99355016F', '775845910', 'Calle Mayor, 95, Valencia'
WHERE NOT EXISTS (SELECT 1 FROM `empleados` WHERE `dni` = '99355016F');
INSERT INTO `empleados` (`nombre`, `dni`, `telefono`, `direccion`)
SELECT 'María Ruiz', '24141472M', '663992994', 'Avenida de la Libertad, 18, Zaragoza'
WHERE NOT EXISTS (SELECT 1 FROM `empleados` WHERE `dni` = '24141472M');

-- --------------------------------------------------------
-- FACTURA EMPLEADO
-- --------------------------------------------------------
INSERT INTO `factura_empleado` 
(`id_empleado`, `fecha_i`, `horas`, `horas_extra`, `importe`, `precio_hora`, `precio_horas_extra`, `fecha_f`)
SELECT 
  e.`id_empleado`,
  DATE_FORMAT(FROM_UNIXTIME(1751375160), '%Y-%m-01') AS `fecha_i`,
  (@h := FLOOR(120 + (RAND()*41))) AS `horas`,
  (@he := FLOOR(RAND()*21))        AS `horas_extra`,
  ROUND(@h  * (@ph := ROUND(6 + (RAND()*2), 2)) + @he * (@phe := ROUND(9 + (RAND()*3), 2)), 2) AS `importe`,
  @ph  AS `precio_hora`,
  @phe AS `precio_horas_extra`,
  LAST_DAY(DATE_FORMAT(FROM_UNIXTIME(1751375160), '%Y-%m-01')) AS `fecha_f`
FROM `empleados` e
WHERE NOT EXISTS (
  SELECT 1 FROM `factura_empleado` fe
  WHERE fe.`id_empleado` = e.`id_empleado`
    AND fe.`fecha_i` = DATE_FORMAT(FROM_UNIXTIME(1751375160), '%Y-%m-01')
);

-- --------------------------------------------------------
-- PAGO EMPLEADO (mínimo 2 pagos aleatorios)
-- --------------------------------------------------------
INSERT INTO pago_empleado (importe, id_metodo, id_banco, fecha, id_factura_empleado)
SELECT fe.importe, 2, 4,
       ADDDATE(DATE_FORMAT(FROM_UNIXTIME(1751375160), '%Y-%m-01'),
               INTERVAL FLOOR(1 + (RAND() * (DAY(LAST_DAY(DATE_FORMAT(FROM_UNIXTIME(1751375160), '%Y-%m-01'))) - 1))) DAY),
       fe.id_factura_empleado
FROM (
    SELECT fe.*, @rownum := @rownum + 1 AS rn, total.total_facturas
    FROM factura_empleado fe
    CROSS JOIN (SELECT @rownum := 0) r
    CROSS JOIN (SELECT COUNT(*) AS total_facturas FROM factura_empleado fe2 WHERE fe2.fecha_i = DATE_FORMAT(FROM_UNIXTIME(1751375160), '%Y-%m-01')) total
    WHERE fe.fecha_i = DATE_FORMAT(FROM_UNIXTIME(1751375160), '%Y-%m-01')
      AND NOT EXISTS (
          SELECT 1 FROM pago_empleado pe WHERE pe.id_factura_empleado = fe.id_factura_empleado
      )
    ORDER BY RAND()
) fe
WHERE fe.rn <= IF(fe.total_facturas < 2, fe.total_facturas, GREATEST(2, FLOOR(fe.total_facturas / 2)));

-- CLIENTES DE PRUEBA
SET @cid := COALESCE((SELECT MAX(client_id) FROM clientes),0);
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Vector Soluciones, S.L.', 'Calle Lopez, 73', 35480, 'vector.soluciones.s.l@gmail.com', '+34605445988', 'B16059537', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '1972-05-02', 0, 0, 'No', 'Empresa', 'Otro', 'Sociedad limitada', 'Vector Soluciones, S.L.', 'B16059537', 'Calle Lopez, 73', 'Activo', '34605445988', 'España', 'Canarias, Las Palmas', 'Agaete', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'vector.soluciones.s.l@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Global Logistica, S.L.', 'Carretera Torres, 184', 35450, 'global.logistica.s.l@gmail.com', '+34627350661', 'B77276814', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '1970-01-26', 0, 0, 'No', 'Empresa', 'Otro', 'Sociedad limitada', 'Global Logistica, S.L.', 'B77276814', 'Carretera Torres, 184', 'Activo', '34627350661', 'España', 'Canarias, Las Palmas', 'Santa Maria de Guia', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'global.logistica.s.l@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Iberica Tecnologias, S.L.', 'Avenida Rodriguez, 138', 35250, 'iberica.tecnologias.s.l@gmail.com', '+34668579018', 'B56231236', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '1966-06-12', 0, 0, 'No', 'Empresa', 'Otro', 'Sociedad limitada', 'Iberica Tecnologias, S.L.', 'B56231236', 'Avenida Rodriguez, 138', 'Activo', '34668579018', 'España', 'Canarias, Las Palmas', 'Ingenio', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'iberica.tecnologias.s.l@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Raul Munoz Blanco', 'Paseo Alvarez, 161', 35200, 'raul.munoz.blanco@gmail.com', '+34627933972', '66048146N', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '1976-04-04', 0, 0, 'No', 'Autónomo', 'Otro', 'Autónomo', 'Raul Munoz Blanco', NULL, 'Paseo Alvarez, 161', 'Activo', '34627933972', 'España', 'Canarias, Las Palmas', 'Telde', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'raul.munoz.blanco@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Orbital Industria, S.L.', 'Paseo Sanchez, 81', 35460, 'orbital.industria.s.l@gmail.com', '+34665427128', 'B17369661', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '2001-03-14', 0, 0, 'No', 'Empresa', 'Otro', 'Sociedad limitada', 'Orbital Industria, S.L.', 'B17369661', 'Paseo Sanchez, 81', 'Activo', '34665427128', 'España', 'Canarias, Las Palmas', 'Galdar', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'orbital.industria.s.l@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Magna Datos, S.L.', 'Avenida Ramos, 17', 35450, 'magna.datos.s.l@gmail.com', '+34648252496', 'B41495995', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '1995-08-31', 0, 0, 'No', 'Empresa', 'Otro', 'Sociedad limitada', 'Magna Datos, S.L.', 'B41495995', 'Avenida Ramos, 17', 'Activo', '34648252496', 'España', 'Canarias, Las Palmas', 'Santa Maria de Guia', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'magna.datos.s.l@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Finanzas Comercial, S.L.', 'Carretera Ramirez, 165', 35200, 'finanzas.comercial.s.l@gmail.com', '+34666398973', 'B12487492', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '2001-02-18', 0, 0, 'No', 'Empresa', 'Otro', 'Sociedad limitada', 'Finanzas Comercial, S.L.', 'B12487492', 'Carretera Ramirez, 165', 'Activo', '34666398973', 'España', 'Canarias, Las Palmas', 'Telde', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'finanzas.comercial.s.l@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Diego Ramirez Santos', 'Calle Romero, 93', 35200, 'diego.ramirez.santos@gmail.com', '+34699716368', '28992778J', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '1990-07-10', 0, 0, 'No', 'Autónomo', 'Otro', 'Autónomo', 'Diego Ramirez Santos', NULL, 'Calle Romero, 93', 'Activo', '34699716368', 'España', 'Canarias, Las Palmas', 'Telde', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'diego.ramirez.santos@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Paula Ruiz Suarez', 'Camino Martinez, 88', 35480, 'paula.ruiz.suarez@gmail.com', '+34684747858', '22788103W', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '1966-02-25', 0, 0, 'No', 'Autónomo', 'Otro', 'Autónomo', 'Paula Ruiz Suarez', NULL, 'Camino Martinez, 88', 'Activo', '34684747858', 'España', 'Canarias, Las Palmas', 'Agaete', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'paula.ruiz.suarez@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Aurora Servicios, S.L.', 'Camino Gil, 14', 35250, 'aurora.servicios.s.l@gmail.com', '+34673266217', 'B29642584', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '2002-11-13', 0, 0, 'No', 'Empresa', 'Otro', 'Sociedad limitada', 'Aurora Servicios, S.L.', 'B29642584', 'Camino Gil, 14', 'Activo', '34673266217', 'España', 'Canarias, Las Palmas', 'Ingenio', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'aurora.servicios.s.l@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Nova Proyectos, S.L.', 'Calle Gomez, 113', 35250, 'nova.proyectos.s.l@gmail.com', '+34675928395', 'B22011662', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '2000-03-15', 0, 0, 'No', 'Empresa', 'Otro', 'Sociedad limitada', 'Nova Proyectos, S.L.', 'B22011662', 'Calle Gomez, 113', 'Activo', '34675928395', 'España', 'Canarias, Las Palmas', 'Ingenio', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'nova.proyectos.s.l@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Pablo Rodriguez Santos', 'Paseo Rodriguez, 142', 35450, 'pablo.rodriguez.santos@gmail.com', '+34609444766', '52261742S', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '1990-07-09', 0, 0, 'No', 'Autónomo', 'Otro', 'Autónomo', 'Pablo Rodriguez Santos', NULL, 'Paseo Rodriguez, 142', 'Activo', '34609444766', 'España', 'Canarias, Las Palmas', 'Santa Maria de Guia', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'pablo.rodriguez.santos@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Manuel Martinez Suarez', 'Calle Rodriguez, 165', 35480, 'manuel.martinez.suarez@gmail.com', '+34672901487', '68635140N', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '1996-04-13', 0, 0, 'No', 'Autónomo', 'Otro', 'Autónomo', 'Manuel Martinez Suarez', NULL, 'Calle Rodriguez, 165', 'Activo', '34672901487', 'España', 'Canarias, Las Palmas', 'Agaete', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'manuel.martinez.suarez@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Diego Gil Rubio', 'Plaza Ramos, 139', 35400, 'diego.gil.rubio@gmail.com', '+34604821529', '38337031X', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '1967-10-05', 0, 0, 'No', 'Autónomo', 'Otro', 'Autónomo', 'Diego Gil Rubio', NULL, 'Plaza Ramos, 139', 'Activo', '34604821529', 'España', 'Canarias, Las Palmas', 'Arucas', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'diego.gil.rubio@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Inversion Analitica, S.L.', 'Plaza Martinez, 31', 35480, 'inversion.analitica.s.l@gmail.com', '+34609165858', 'B07570971', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '1968-09-15', 0, 0, 'No', 'Empresa', 'Otro', 'Sociedad limitada', 'Inversion Analitica, S.L.', 'B07570971', 'Plaza Martinez, 31', 'Activo', '34609165858', 'España', 'Canarias, Las Palmas', 'Agaete', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'inversion.analitica.s.l@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Inversion Retail, S.L.', 'Carretera Romero, 150', 35300, 'inversion.retail.s.l@gmail.com', '+34648107995', 'B84590868', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '2002-12-04', 0, 0, 'No', 'Empresa', 'Otro', 'Sociedad limitada', 'Inversion Retail, S.L.', 'B84590868', 'Carretera Romero, 150', 'Activo', '34648107995', 'España', 'Canarias, Las Palmas', 'Santa Brigida', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'inversion.retail.s.l@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Diego Gomez Blanco', 'Avenida Diaz, 198', 35250, 'diego.gomez.blanco@gmail.com', '+34619991100', '49810350D', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '1963-08-04', 0, 0, 'No', 'Autónomo', 'Otro', 'Autónomo', 'Diego Gomez Blanco', NULL, 'Avenida Diaz, 198', 'Activo', '34619991100', 'España', 'Canarias, Las Palmas', 'Ingenio', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'diego.gomez.blanco@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Nexo Desarrollos, S.L.', 'Camino Romero, 135', 35200, 'nexo.desarrollos.s.l@gmail.com', '+34642771408', 'B40978652', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '1987-10-18', 0, 0, 'No', 'Empresa', 'Otro', 'Sociedad limitada', 'Nexo Desarrollos, S.L.', 'B40978652', 'Camino Romero, 135', 'Activo', '34642771408', 'España', 'Canarias, Las Palmas', 'Telde', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'nexo.desarrollos.s.l@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Diego Gil Vega', 'Calle Moreno, 10', 35460, 'diego.gil.vega@gmail.com', '+34618288387', '70323810E', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '1968-07-17', 0, 0, 'No', 'Autónomo', 'Otro', 'Autónomo', 'Diego Gil Vega', NULL, 'Calle Moreno, 10', 'Activo', '34618288387', 'España', 'Canarias, Las Palmas', 'Galdar', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'diego.gil.vega@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Irene Dominguez Vega', 'Avenida Moreno, 129', 35460, 'irene.dominguez.vega@gmail.com', '+34626720300', '60220347E', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '1994-06-07', 0, 0, 'No', 'Autónomo', 'Otro', 'Autónomo', 'Irene Dominguez Vega', NULL, 'Avenida Moreno, 129', 'Activo', '34626720300', 'España', 'Canarias, Las Palmas', 'Galdar', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'irene.dominguez.vega@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Juan Gomez Vega', 'Calle Moreno, 132', 35200, 'juan.gomez.vega@gmail.com', '+34607640671', '30164830P', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '1972-11-29', 0, 0, 'No', 'Autónomo', 'Otro', 'Autónomo', 'Juan Gomez Vega', NULL, 'Calle Moreno, 132', 'Activo', '34607640671', 'España', 'Canarias, Las Palmas', 'Telde', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'juan.gomez.vega@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Aurora Comercial, S.L.', 'Calle Moreno, 193', 35460, 'aurora.comercial.s.l@gmail.com', '+34672307700', 'B24846487', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '1984-10-18', 0, 0, 'No', 'Empresa', 'Otro', 'Sociedad limitada', 'Aurora Comercial, S.L.', 'B24846487', 'Calle Moreno, 193', 'Activo', '34672307700', 'España', 'Canarias, Las Palmas', 'Galdar', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'aurora.comercial.s.l@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Diego Alvarez Calvo', 'Camino Dominguez, 80', 35400, 'diego.alvarez.calvo@gmail.com', '+34696490181', '52027358R', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '1963-03-10', 0, 0, 'No', 'Autónomo', 'Otro', 'Autónomo', 'Diego Alvarez Calvo', NULL, 'Camino Dominguez, 80', 'Activo', '34696490181', 'España', 'Canarias, Las Palmas', 'Arucas', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'diego.alvarez.calvo@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Inversion Innovacion, S.L.', 'Carretera Sanchez, 176', 35200, 'inversion.innovacion.s.l@gmail.com', '+34610358195', 'B73596546', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '1974-09-16', 0, 0, 'No', 'Empresa', 'Otro', 'Sociedad limitada', 'Inversion Innovacion, S.L.', 'B73596546', 'Carretera Sanchez, 176', 'Activo', '34610358195', 'España', 'Canarias, Las Palmas', 'Telde', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'inversion.innovacion.s.l@gmail.com');
INSERT INTO `clientes` (`client_id`,`nombre`,`direccion`,`cp`,`email`,`telefono`,`cif`,`fecha`,`user_id`,`estado`,`imagen`,`email_marketing`,`subvencionado`,`fecha_nacimiento`,`sms_habilitado`,`felicitado`,`peluqueria`,`tipo`,`sexo`,`forma_juridica`,`nombre_juridico`,`cif_juridico`,`domicilio_fiscal`,`activo`,`movil`,`pais`,`provincia`,`localidad`,`terminos`)
SELECT (@cid := @cid + 1), 'Manuel Alvarez Santos', 'Avenida Lopez, 184', 35001, 'manuel.alvarez.santos@gmail.com', '+34656671346', '10682591B', '2025-08-24', 13, 'Potencial', 'assets/images/clientes/user-default.png', 0, 'No', '1979-04-06', 0, 0, 'No', 'Autónomo', 'Otro', 'Autónomo', 'Manuel Alvarez Santos', NULL, 'Avenida Lopez, 184', 'Activo', '34656671346', 'España', 'Canarias, Las Palmas', 'Las Palmas de Gran Canaria', 1
WHERE NOT EXISTS (SELECT 1 FROM `clientes` WHERE `email` = 'manuel.alvarez.santos@gmail.com');

-- --------------------------------------------------------
-- ARTÍCULOS AUTO - SECTOR: SERVICIOS_ABOGADOS
-- Origen: /home/factuley/generador.factuley.net/articulos/SERVICIOS_ABOGADOS.sql
-- --------------------------------------------------------
-- Tabla detectada: `apartados` | Columnas: (apartado_id, titulo, descripcion, cantidad, precio_unitario, precio_coste, codigo, numero_lote, stock) | ID: apartado_id
SET @aid := COALESCE((SELECT MAX(`apartado_id`) FROM `apartados`), 0);
INSERT IGNORE INTO `apartados` (apartado_id, titulo, descripcion, cantidad, precio_unitario, precio_coste, codigo, numero_lote, stock) VALUES
((@aid := @aid + 1), 'Mediación y arbitraje', 'Resolución de conflictos extrajudiciales.', 28, 900, 720, 'ABG007', 'LoteK07', 6),
((@aid := @aid + 1), 'Consultas legales online', 'Orientación jurídica a distancia.', 55, 500, 400, 'ABG014', 'LoteK14', 11),
((@aid := @aid + 1), 'Protección de datos', 'Cumplimiento de normativas y gestión de privacidad.', 35, 1150, 920, 'ABG009', 'LoteK09', 8),
((@aid := @aid + 1), 'Asesoría legal civil', 'Orientación y defensa en asuntos civiles.', 45, 850, 680, 'ABG001', 'LoteK01', 10),
((@aid := @aid + 1), 'Propiedad intelectual', 'Protección de derechos de autor y marcas.', 22, 1700, 1360, 'ABG013', 'LoteK13', 5),
((@aid := @aid + 1), 'Derecho penal', 'Asistencia en procedimientos penales.', 25, 1200, 960, 'ABG003', 'LoteK03', 6),
((@aid := @aid + 1), 'Derecho inmobiliario', 'Compraventa y arrendamientos de bienes inmuebles.', 33, 1350, 1080, 'ABG008', 'LoteK08', 7),
((@aid := @aid + 1), 'Derecho de familia', 'Divorcios, custodias y herencias.', 50, 780, 624, 'ABG005', 'LoteK05', 12),
((@aid := @aid + 1), 'Derecho mercantil', 'Asesoría y contratos para empresas y sociedades.', 30, 1400, 1120, 'ABG004', 'LoteK04', 7),
((@aid := @aid + 1), 'Derecho fiscal', 'Asesoría en materia tributaria y fiscal.', 27, 1450, 1160, 'ABG012', 'LoteK12', 6);

-- --------------------------------------------------------
-- P R O V E E D O R E S   A U T O  —  SECTOR: PROVEEDORES_ABOGADOS_DESDE_SERVICIOS
-- Origen: /home/factuley/generador.factuley.net/proveedores/PROVEEDORES_ABOGADOS_DESDE_SERVICIOS.sql
-- --------------------------------------------------------
-- Tabla detectada: `proveedores` | Columnas: (id_proveedor, nombre, cif, cp, direccion, email, telefono, tipo) | ID: id_proveedor
SET @pid := COALESCE((SELECT MAX(`id_proveedor`) FROM `proveedores`), 0);
INSERT IGNORE INTO `proveedores` (id_proveedor, nombre, cif, cp, direccion, email, telefono, tipo) VALUES
((@pid := @pid + 1), 'ProtecData Consulting S.L.', 'N56013412', 35017, 2876, 'soporte@protecdata.es', 928774567, 'Protección de Datos'),
((@pid := @pid + 1), 'LexOnline Consultores SL', 'K20794112', 35027, 4863, 'consultas@lexonline.com', 678942514, 'Consultas Legales Online'),
((@pid := @pid + 1), 'LegalPlus Canarias S.L.', 'B92837411', 35001, 8125, 'contacto@legalpluscanarias.com', 928451205, 'Asesoría Legal Civil'),
((@pid := @pid + 1), 'Familia y Herencias Canarias S.L.', 'R25194811', 35009, 5585, 'consultas@familiayherencias.com', 684915376, 'Derecho de Familia'),
((@pid := @pid + 1), 'Mercantil Asesores SL', 'E60417311', 35007, 9315, 'asesoria@mercantilasesores.com', 928772643, 'Derecho Mercantil'),
((@pid := @pid + 1), 'Inmolegal Archipiélago SL', 'T30495712', 35015, 1460, 'asesoria@inmolegalarchipielago.com', 604938221, 'Derecho Inmobiliario'),
((@pid := @pid + 1), 'Contratos Pro SL', 'K48620311', 35011, 7423, 'contacto@contratospro.com', 928663405, 'Redacción de Contratos'),
((@pid := @pid + 1), 'Defensa Penal Archipiélago S.L.', 'Y91563811', 35005, 4220, 'defensa@penalarchipielago.com', 676394524, 'Derecho Penal');

-- --------------------------------------------------------
-- F A C T U R A S  &  P A G O S   D E   P R O V E E D O R E S
-- Fecha base: FROM_UNIXTIME(1751375160)
-- Inserta 9 facturas y 4 pagos aleatorios.
-- --------------------------------------------------------
INSERT INTO `factura_proveedor` (`importe`,`id_proveedor`,`fecha_vencimiento`,`numero`,`fecha`)
SELECT 
  ROUND(100 + (RAND()*1900), 2) AS importe,
  p.`id_proveedor`,
  DATE_ADD(FROM_UNIXTIME(1751375160), INTERVAL FLOOR(60 + (RAND()*31)) DAY) AS fecha_vencimiento,
  CONCAT('FP-', DATE_FORMAT(FROM_UNIXTIME(1751375160),'%Y%m%d'), '-', p.`id_proveedor`, '-', FLOOR(RAND()*1000)) AS numero,
  FROM_UNIXTIME(1751375160) AS fecha
FROM `proveedores` p
ORDER BY RAND()
LIMIT 9;

INSERT INTO `pago_proveedor` (`importe`,`id_metodo`,`id_banco`,`fecha`,`id_factura_proveedor`)
SELECT 
  fp.`importe`,
  2 AS id_metodo,
  4 AS id_banco,
  DATE_ADD(fp.`fecha`, INTERVAL FLOOR(1 + (RAND() * GREATEST(1, DATEDIFF(fp.`fecha_vencimiento`, fp.`fecha`)))) DAY) AS fecha_pago,
  fp.`id_factura_proveedor`
FROM `factura_proveedor` fp
LEFT JOIN `pago_proveedor` pp ON pp.`id_factura_proveedor` = fp.`id_factura_proveedor`
WHERE fp.`fecha` = FROM_UNIXTIME(1751375160)
  AND pp.`id_pago_proveedor` IS NULL
ORDER BY RAND()
LIMIT 4;

-- =============================================
-- PRESUPUESTOS + PRESUPUESTOS_MATERIAL (sin repetir cliente)
-- JSON detallado: codigo,cantidad,descripcion,precio_unitario,titulo=null,igic
-- =============================================
SET @want := 3 + FLOOR(RAND()*3); -- 3..5
SET @f0   := 1751375160;
SET @year := DATE_FORMAT(FROM_UNIXTIME(@f0),'%Y');

-- Clientes (sin repetir)
DROP TEMPORARY TABLE IF EXISTS _picked_clients;
CREATE TEMPORARY TABLE _picked_clients AS
SELECT client_id, nombre, direccion, cp, telefono, email, cif
FROM (
  SELECT c.*, ROW_NUMBER() OVER (ORDER BY RAND()) rn
  FROM clientes c
) t
WHERE rn <= @want;

-- 3 items aleatorios por cliente (desde apartados; precio_unitario > 0)
DROP TEMPORARY TABLE IF EXISTS _client_items;
CREATE TEMPORARY TABLE _client_items AS
SELECT x.client_id,
       x.apartado_id,
       x.titulo,
       x.descripcion,
       x.codigo,
       x.precio_unitario,
       (1 + FLOOR(RAND()*2)) AS qty
FROM (
  SELECT pc.client_id, a.*, ROW_NUMBER() OVER (PARTITION BY pc.client_id ORDER BY RAND()) rn
  FROM _picked_clients pc
  JOIN apartados a ON a.precio_unitario > 0
) x
WHERE x.rn <= 3;

-- Numeración y fecha por cliente
DROP TEMPORARY TABLE IF EXISTS _to_make;
CREATE TEMPORARY TABLE _to_make AS
SELECT pc.client_id,
       CONCAT(@year,'/P', LPAD(ROW_NUMBER() OVER (ORDER BY pc.client_id),3,'0')) AS numero,
       DATE_ADD(FROM_UNIXTIME(@f0), INTERVAL (60 + FLOOR(RAND()*31)) DAY)        AS fecha
FROM _picked_clients pc;

-- INSERT primero en 'presupuestos' (Estado = Aceptado, Título = Número)
INSERT INTO presupuestos
(titulo,id_cliente,fecha,numero,condiciones,tipo,estado,detallado,importe,
 id_fase,id_sector,id_obra,cif,domicilio,cp,telefono,email,id_usuario,importe_final,
 irpf,nota_interna,nota_externa,imagen,programado,lugar,fechas,impuesto)
SELECT 
  tm.numero AS titulo,
  pc.client_id,
  tm.fecha,
  tm.numero,
  NULL AS condiciones,
  'Material' AS tipo,
  'Aceptado' AS estado,
  CONCAT('[', GROUP_CONCAT(
    CONCAT('{',
      '"codigo":', JSON_QUOTE(ci.codigo), ',',
      '"cantidad":', JSON_QUOTE(CONCAT(ci.qty,' ')), ',',
      '"descripcion":', JSON_QUOTE(ci.descripcion), ',',
      '"precio_unitario":', JSON_QUOTE(FORMAT(ci.precio_unitario,2)), ',',
      '"titulo":', 'null', ',',
      '"igic":', JSON_QUOTE('0.00')
    ,'}') ORDER BY ci.apartado_id SEPARATOR ','), ']') AS detallado,
  ROUND(SUM(ci.qty * ci.precio_unitario),2) AS importe,
  NULL AS id_fase,
  NULL AS id_sector,
  NULL AS id_obra,
  pc.cif,
  pc.direccion,
  pc.cp,
  pc.telefono,
  pc.email,
  13 AS id_usuario,
  ROUND(SUM(ci.qty * ci.precio_unitario),2) AS importe_final,
  0 AS irpf,
  NULL AS nota_interna,
  NULL AS nota_externa,
  'assets/images/presupuestos/default.png' AS imagen,
  NULL AS programado,
  NULL AS lugar,
  NULL AS fechas,
  0 AS impuesto
FROM _to_make tm
JOIN _picked_clients pc ON pc.client_id = tm.client_id
JOIN _client_items  ci ON ci.client_id = tm.client_id
GROUP BY tm.numero, pc.client_id, tm.fecha, pc.cif, pc.direccion, pc.cp, pc.telefono, pc.email;

-- Mapear IDs recién creados
DROP TEMPORARY TABLE IF EXISTS _map_ids;
CREATE TEMPORARY TABLE _map_ids AS
SELECT p.id_presupuesto, p.numero, p.id_cliente
FROM presupuestos p
JOIN _to_make tm ON tm.numero = p.numero AND tm.client_id = p.id_cliente;

-- INSERT en 'presupuestos_material' con mismo id_presupuesto (Estado = Aceptado)
INSERT INTO presupuestos_material
(id_presupuesto,titulo,id_cliente,fecha,numero,condiciones,tipo,estado,detallado,importe,
 id_evento,cif,domicilio,cp,telefono,email,id_usuario,importe_final,irpf,imagen,descuento)
SELECT 
  m.id_presupuesto,
  tm.numero AS titulo,
  pc.client_id,
  tm.fecha,
  tm.numero,
  NULL AS condiciones,
  'Material' AS tipo,
  'Aceptado' AS estado,
  CONCAT('[', GROUP_CONCAT(
    CONCAT('{',
      '"codigo":', JSON_QUOTE(ci.codigo), ',',
      '"cantidad":', JSON_QUOTE(CONCAT(ci.qty,' ')), ',',
      '"descripcion":', JSON_QUOTE(ci.descripcion), ',',
      '"precio_unitario":', JSON_QUOTE(FORMAT(ci.precio_unitario,2)), ',',
      '"titulo":', 'null', ',',
      '"igic":', JSON_QUOTE('0.00')
    ,'}') ORDER BY ci.apartado_id SEPARATOR ','), ']') AS detallado,
  ROUND(SUM(ci.qty * ci.precio_unitario),2) AS importe,
  COALESCE((SELECT MIN(id_evento) FROM eventos2),1) AS id_evento,
  pc.cif,
  pc.direccion,
  pc.cp,
  pc.telefono,
  pc.email,
  13 AS id_usuario,
  ROUND(SUM(ci.qty * ci.precio_unitario),2) AS importe_final,
  0 AS irpf,
  'assets/images/presupuestos/default.png' AS imagen,
  NULL AS descuento
FROM _map_ids m
JOIN _to_make tm        ON tm.numero    = m.numero  AND tm.client_id = m.id_cliente
JOIN _picked_clients pc ON pc.client_id = m.id_cliente
JOIN _client_items  ci  ON ci.client_id = m.id_cliente
GROUP BY m.id_presupuesto, tm.numero, pc.client_id, tm.fecha, pc.cif, pc.direccion, pc.cp, pc.telefono, pc.email;

-- Limpieza
DROP TEMPORARY TABLE IF EXISTS _map_ids;
DROP TEMPORARY TABLE IF EXISTS _client_items;
DROP TEMPORARY TABLE IF EXISTS _to_make;
DROP TEMPORARY TABLE IF EXISTS _picked_clients;

-- =============================================
-- FACTURAS MANUALES (3–5 clientes distintos) + LÍNEAS + 1 PAGO SOLO EN 2 ALEATORIAS
-- Reglas: 2 facturas 'Pagada'; el pago = total; id_banco=6; numeración consecutiva anual
-- Tablas: factura_manual, apartado_factura_manual, pago_factura
-- =============================================
SET @want := 3 + FLOOR(RAND()*3); -- 3..5
SET @f0   := 1751375160; -- timestamp base recibido
SET @f_date := DATE(FROM_UNIXTIME(@f0)); -- fecha factura (DATE)
SET @year := DATE_FORMAT(FROM_UNIXTIME(@f0),'%Y');

-- Numeración: obtener la última secuencia de 3 dígitos del año actual (A/YYYYNNN)
SET @last_seq := (
    SELECT MAX(CAST(RIGHT(numero,3) AS UNSIGNED))
    FROM factura_manual
    WHERE numero LIKE CONCAT('A/', @year, '%')
);
SET @last_seq := IFNULL(@last_seq, 0);

-- Clientes (elige @want distintos; si hay menos, coge los que haya)
DROP TEMPORARY TABLE IF EXISTS _picked_clients;
CREATE TEMPORARY TABLE _picked_clients AS
SELECT client_id, nombre, direccion, cp, telefono, email, cif
FROM (
  SELECT c.*, ROW_NUMBER() OVER (ORDER BY RAND()) rn FROM clientes c
) x WHERE x.rn <= @want;

-- 3 artículos por cliente desde 'apartados' (precio > 0); cantidades 1–2 (string con espacio)
DROP TEMPORARY TABLE IF EXISTS _client_items;
CREATE TEMPORARY TABLE _client_items AS
SELECT t.client_id, t.descripcion, t.codigo, t.precio_unitario,
       CONCAT(1 + FLOOR(RAND()*2),' ') AS cantidad
FROM (
  SELECT pc.client_id, a.*, ROW_NUMBER() OVER (PARTITION BY pc.client_id ORDER BY RAND()) rn
  FROM _picked_clients pc JOIN apartados a ON a.precio_unitario > 0
) t WHERE t.rn <= 3;

-- Números, fecha y vencimiento por cliente (secuencias consecutivas)
DROP TEMPORARY TABLE IF EXISTS _to_make;
CREATE TEMPORARY TABLE _to_make AS
SELECT pc.client_id,
       CONCAT('A/', @year, LPAD(@last_seq + ROW_NUMBER() OVER (ORDER BY pc.client_id),3,'0')) AS numero,
       @f_date AS fecha,
       DATE_ADD(@f_date, INTERVAL 30 DAY) AS fecha_vto
FROM _picked_clients pc;

-- INSERT facturas: condiciones, id_banco=6, estado por defecto 'No enviada'
INSERT INTO factura_manual
 (numero, fecha, direccion, importe, estado, email, imagen, fecha_vencimiento,
  nombre, cif, cp, telefono, irpf, client_id, fecha_envio, titulo, tipo,
  programado, id_banco, id_banco_2, id_banco_3, condiciones, impuesto, fechas, lugar, id_proyecto, clase)
SELECT 
  tm.numero,
  tm.fecha,
  pc.direccion,
  ROUND(SUM(CAST(TRIM(ci.cantidad) AS UNSIGNED) * ci.precio_unitario), 2) AS importe,
  'No enviada' AS estado,
  pc.email,
  'assets/images/facturas/default.png' AS imagen,
  tm.fecha_vto,
  pc.nombre,
  pc.cif,
  pc.cp,
  pc.telefono,
  NULL AS irpf,
  pc.client_id,
  NULL AS fecha_envio,
  'Factura' AS titulo,
  'Empresa' AS tipo,
  NULL AS programado,
  6 AS id_banco,
  NULL AS id_banco_2,
  NULL AS id_banco_3,
  'El responsable del tratamiento de sus datos. Sus datos serán tratados con la finalidad de gestionar a los servicios administrativos y facturar nuestros servicios. \nLa empresa tiene a disposición toda la documentación ' AS condiciones,
  NULL AS impuesto,
  NULL AS fechas,
  NULL AS lugar,
  NULL AS id_proyecto,
  'Normal' AS clase
FROM _to_make tm
JOIN _picked_clients pc ON pc.client_id = tm.client_id
JOIN _client_items  ci ON ci.client_id = tm.client_id
GROUP BY tm.numero, tm.fecha, tm.fecha_vto, pc.client_id, pc.nombre, pc.direccion, pc.cp, pc.telefono, pc.email, pc.cif;

-- Mapear IDs facturas recién creadas (con importe y fechas)
DROP TEMPORARY TABLE IF EXISTS _map_ids;
CREATE TEMPORARY TABLE _map_ids AS
SELECT f.id_factura_manual, f.numero, f.client_id, f.importe, f.fecha, f.fecha_vencimiento
FROM factura_manual f JOIN _to_make tm ON tm.numero = f.numero AND tm.client_id = f.client_id;

-- Elegir 2 facturas como pagadas (si hay menos de 2, marca las que haya)
DROP TEMPORARY TABLE IF EXISTS _paid_2;
CREATE TEMPORARY TABLE _paid_2 AS
SELECT id_factura_manual FROM _map_ids ORDER BY RAND() LIMIT 2;
UPDATE factura_manual f
JOIN _paid_2 p ON p.id_factura_manual = f.id_factura_manual
SET f.estado = 'Pagada';

-- INSERT líneas: 3 por factura
INSERT INTO apartado_factura_manual
 (cantidad, titulo, descripcion, precio_unitario, id_factura_manual, id_medida, codigo, igic, id_albaran)
SELECT 
  ci.cantidad,
  NULL AS titulo,
  ci.descripcion,
  ci.precio_unitario,
  m.id_factura_manual,
  0 AS id_medida,
  ci.codigo,
  0.00 AS igic,
  NULL AS id_albaran
FROM _map_ids m
JOIN _client_items ci ON ci.client_id = m.client_id;

-- INSERT 1 pago SOLO de las 2 'Pagada' (importe = total), id_banco=6; fecha dentro de 30 días
INSERT INTO pago_factura (importe, id_metodo, id_banco, fecha, id_factura_manual)
SELECT 
  m.importe,
  2 AS id_metodo, -- ajusta si necesitas un id_metodo específico
  6 AS id_banco,
  DATE_ADD(m.fecha, INTERVAL FLOOR(1 + (RAND()*30)) DAY) AS fecha_pago,
  m.id_factura_manual
FROM _map_ids m
JOIN _paid_2 p ON p.id_factura_manual = m.id_factura_manual;

-- Limpieza
DROP TEMPORARY TABLE IF EXISTS _paid_2;
DROP TEMPORARY TABLE IF EXISTS _map_ids;
DROP TEMPORARY TABLE IF EXISTS _client_items;
DROP TEMPORARY TABLE IF EXISTS _to_make;
DROP TEMPORARY TABLE IF EXISTS _picked_clients;

-- =============================================
-- LOGINS + ACTIVIDAD (cronología correcta)
-- Logins distribuidos aleatoriamente en todo el período
-- =============================================
TRUNCATE TABLE logins;
TRUNCATE TABLE actividad;
SET @start := 1751375160;
SET @end := 1756040760;
SET @duration := @end - @start;
DROP TEMPORARY TABLE IF EXISTS _users_all;
CREATE TEMPORARY TABLE _users_all AS SELECT user_id FROM users;
SET @last_user := (SELECT MAX(user_id) FROM _users_all);
DROP TEMPORARY TABLE IF EXISTS _users_pick;
CREATE TEMPORARY TABLE _users_pick AS
SELECT user_id FROM _users_all WHERE user_id = @last_user
UNION
SELECT 13 FROM _users_all WHERE user_id = 13
UNION
SELECT user_id FROM (
  SELECT user_id, ROW_NUMBER() OVER (ORDER BY RAND()) rn
  FROM _users_all
  WHERE user_id NOT IN (COALESCE(@last_user,-1), 13)
) t WHERE t.rn <= 5;
DROP TEMPORARY TABLE IF EXISTS _ips;
CREATE TEMPORARY TABLE _ips AS
SELECT 1 AS ip_id, CONCAT((1+FLOOR(RAND()*223)),'.',(1+FLOOR(RAND()*254)),'.',(1+FLOOR(RAND()*254)),'.',(1+FLOOR(RAND()*254))) AS ip
UNION ALL SELECT 2, CONCAT((1+FLOOR(RAND()*223)),'.',(1+FLOOR(RAND()*254)),'.',(1+FLOOR(RAND()*254)),'.',(1+FLOOR(RAND()*254)))
UNION ALL SELECT 3, CONCAT((1+FLOOR(RAND()*223)),'.',(1+FLOOR(RAND()*254)),'.',(1+FLOOR(RAND()*254)),'.',(1+FLOOR(RAND()*254)));
DROP TEMPORARY TABLE IF EXISTS _user_ip;
CREATE TEMPORARY TABLE _user_ip AS
SELECT u.user_id, i.ip
FROM (
  SELECT user_id, (ROW_NUMBER() OVER (ORDER BY user_id) - 1) % 3 + 1 AS ip_id
  FROM _users_pick
) u JOIN _ips i USING (ip_id);
DROP TEMPORARY TABLE IF EXISTS _agents;
CREATE TEMPORARY TABLE _agents (ua TEXT);
INSERT INTO _agents(ua) VALUES
('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36'),
('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Safari/605.1.15'),
('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36');
SET @user13_ip := (SELECT ip FROM _user_ip WHERE user_id = 13);
SET @user13_login := UNIX_TIMESTAMP(DATE(FROM_UNIXTIME(@start))) + (8*3600) + FLOOR(RAND()*11*3600);
INSERT INTO logins (login_user, login_ip, login_agent, login_success, login_date) VALUES
(13, @user13_ip, (SELECT ua FROM _agents ORDER BY RAND() LIMIT 1), 1, @user13_login);
INSERT INTO actividad (actividad, ip, user_id, fecha) VALUES
('creación de cliente', @user13_ip, 13, FROM_UNIXTIME(@user13_login + (15*60 + FLOOR(RAND()*5*60)))),
('carpeta creada', @user13_ip, 13, FROM_UNIXTIME(@user13_login + (35*60 + FLOOR(RAND()*5*60))));
DROP TEMPORARY TABLE IF EXISTS _user_login_counts;
CREATE TEMPORARY TABLE _user_login_counts AS
SELECT 
  user_id,
  1 + FLOOR(RAND() * 3) as num_logins
FROM _users_pick
WHERE user_id != 13;
DROP TEMPORARY TABLE IF EXISTS _other_users_logins;
CREATE TEMPORARY TABLE _other_users_logins AS
WITH RECURSIVE nums AS (
  SELECT 1 as n
  UNION ALL
  SELECT n + 1 FROM nums WHERE n < 3
)
SELECT 
  ulc.user_id,
  ui.ip,
  n.n as login_num,
  ROW_NUMBER() OVER (ORDER BY RAND()) as orden_global
FROM _user_login_counts ulc
JOIN _user_ip ui ON ui.user_id = ulc.user_id
CROSS JOIN nums n
WHERE n.n <= ulc.num_logins;
DROP TEMPORARY TABLE IF EXISTS _login_times;
CREATE TEMPORARY TABLE _login_times AS
SELECT 
  ol.*,
  UNIX_TIMESTAMP(DATE(FROM_UNIXTIME(@start + FLOOR(RAND() * @duration)))) + 
  (8*3600) + FLOOR(RAND() * 11.67 * 3600) as login_timestamp
FROM _other_users_logins ol;
SET @sms_position := 1 + FLOOR(RAND() * (SELECT COUNT(*) FROM _login_times));
DROP TEMPORARY TABLE IF EXISTS _all_events;
CREATE TEMPORARY TABLE _all_events (
  event_type VARCHAR(20),
  user_id INT,
  ip VARCHAR(15),
  actividad VARCHAR(100),
  user_agent TEXT,
  timestamp INT
);
INSERT INTO _all_events (event_type, user_id, ip, user_agent, timestamp)
SELECT 'login', user_id, ip, 
  (SELECT ua FROM _agents ORDER BY RAND() LIMIT 1),
  login_timestamp
FROM _login_times;
INSERT INTO _all_events (event_type, user_id, ip, actividad, timestamp)
SELECT 'actividad', 
  lt.user_id,
  lt.ip,
  CASE 
    WHEN lt.orden_global = @sms_position THEN 'sms marketing activado'
    ELSE ELT(1+FLOOR(RAND()*3),
         'creación de cliente',
         'carpeta creada',
         'subida de archivo a la carpeta de marketing')
  END,
  lt.login_timestamp + (15*60 + FLOOR(RAND()*5*60))
FROM _login_times lt;
INSERT INTO logins (login_user, login_ip, login_agent, login_success, login_date)
SELECT user_id, ip, user_agent, 1, timestamp
FROM _all_events
WHERE event_type = 'login'
ORDER BY timestamp;
INSERT INTO actividad (actividad, ip, user_id, fecha)
SELECT actividad, ip, user_id, FROM_UNIXTIME(timestamp)
FROM _all_events
WHERE event_type = 'actividad'
ORDER BY timestamp;
DROP TEMPORARY TABLE IF EXISTS _all_events;
DROP TEMPORARY TABLE IF EXISTS _login_times;
DROP TEMPORARY TABLE IF EXISTS _other_users_logins;
DROP TEMPORARY TABLE IF EXISTS _user_login_counts;
DROP TEMPORARY TABLE IF EXISTS _agents;
DROP TEMPORARY TABLE IF EXISTS _user_ip;
DROP TEMPORARY TABLE IF EXISTS _ips;
DROP TEMPORARY TABLE IF EXISTS _users_pick;
DROP TEMPORARY TABLE IF EXISTS _users_all;
