CREATE SCHEMA learndata ;
CREATE TABLE dim_clientes (
    id_cliente int,
    fecha_creacion_cliente DATE,
    nombre_cliente varchar(100),
    apellido_cliente varchar(100),
    email_cliente varchar(100),
    telefono_cliente varchar(100),
    region_cliente varchar(100),
    pais_cliente varchar(100),
    codigo_postal_cliente varchar(100),
    direccion_cliente varchar(255),
    PRIMARY KEY (id_cliente)
   );
   
CREATE TABLE dim_producto (
  id_producto int ,
  sku_producto int,
  nombre_producto varchar(100),
  publicado_producto BOOLEAN ,
  inventario_producto varchar(100),
  precio_normal_producto INT ,
  categoria_producto varchar(100),
  PRIMARY KEY (sku_producto)
);
CREATE TABLE fac_pedidos (
  id_pedido INT,
  sku_producto INT,
  estado_pedido VARCHAR(50),
  fecha_pedido DATE ,
  id_cliente INT  ,
  tipo_pago_pedido VARCHAR(50) ,
  costo_pedido INT  ,
  importe_de_descuento_pedido decimal(10,0) ,
  importe_total_pedido INT ,
  cantidad_pedido INT  ,
  codigo_cupon_pedido VARCHAR(100),
  PRIMARY KEY (id_pedido),
  FOREIGN KEY (id_cliente) REFERENCES dim_clientes (id_cliente),
  FOREIGN KEY (sku_producto) REFERENCES dim_producto (sku_producto)
);
CREATE TABLE fac_pagos_stripe (
  id_pago VARCHAR(50),
  fecha_pago datetime(6) ,
  id_pedido int ,
  importe_pago int ,
  moneda_pago VARCHAR(5),
  comision_pago decimal(10,2) ,
  neto_pago decimal(10,2) ,
  tipo_pago VARCHAR(50),
  PRIMARY KEY (id_pago),
  FOREIGN KEY (id_pedido) REFERENCES fac_pedidos (id_pedido)
);
INSERT INTO learndata_1.dim_producto
SELECT
id as id_producto,
sku as sku_producto,
nombre as nombre_producto,
publicado as publicado_producto,
inventario as inventario_producto,
precio_normal as precio_normal_producto,
categorias as categoria_producto
FROM learndata_crudo.raw_productos_wocommerce;
SELECT 
id as id_cliente,
DATE(STR_TO_DATE(date_created,"%d/%m/%Y %H:%i:%s")) as fecha_creacion_cliente,
JSON_VALUE(billing,'$[0].first_name') AS nombre_cliente,
JSON_VALUE(billing,'$[0].last_name') AS apellido_cliente,
JSON_VALUE(billing,'$[0].email') AS email_cliente,
JSON_VALUE(billing,'$[0].phone') AS telefono_cliente,
JSON_VALUE(billing,'$[0].Region') AS region_cliente,
JSON_VALUE(billing,'$[0].country') AS pais_cliente,
JSON_VALUE(billing,'$[0].postcode') AS codigo_postal_cliente,
JSON_VALUE(billing,'$[0].address_1') AS direccion_cliente
FROM learndata_crudo.raw_clientes_wocommerce;
INSERT INTO learndata_1.fac_pedidos
SELECT
	numero_de_pedido as id_pedido,
	CASE WHEN p.SKU_producto IS NULL THEN 3 ELSE p.SKU_producto END as SKU_producto,
	estado_de_pedido as estado_pedido,
	DATE(fecha_de_pedido) as fecha_pedido,
	`id cliente` AS id_cliente,
	CASE WHEN titulo_metodo_de_pago LIKE '%Stripe%' THEN 'Stripe' ELSE 'Tarjeta' END AS metodo_pago_pedido,
	coste_articulo AS costo_pedido,
	importe_de_descuento_del_carrito AS importe_de_descuento_pedido, 
	importe_total_pedido AS importe_total_pedido,
	cantidad AS cantidad_pedido,
	cupon_articulo AS codigo_cupon_pedido
FROM learndata_crudo.raw_pedidos_wocommerce w
LEFT JOIN learndata_1.dim_producto p on p.nombre_producto = w.nombre_del_articulo;
SELECT * FROM learndata_crudo.raw_pedidos_wocommerce
WHERE numero_de_pedido = 41624;
----- Debemos primero analizar si podemos detectar porque viene y si no se elimina, reportamos al equipo que corresponda --
DELETE FROM learndata_crudo.raw_pedidos_wocommerce WHERE numero_de_pedido = 41624 and `id cliente` = 1324;
INSERT INTO learndata_1.fac_pagos_stripe
SELECT
	id as id_pago,
	TIMESTAMP(created) AS fecha_pago,
	RIGHT(description,5) as id_pedido,
	amount as importe_pago,
	currency as moneda_pago,
	CAST(REPLACE(fee,',','.')AS DECIMAL(10,2)) as comision_pago,
	CAST(REPLACE(net,',','.') AS DECIMAL(10,2))  as neto_pago,
	type as tipo_pago
FROM learndata_crudo.raw_pagos_stripe;
SET @@SESSION.sql_mode='ALLOW_INVALID_DATES';