#!/usr/bin/env python3
"""
build_sql_from_docx.py
Genera el script SQL de importación de recetas desde el recetario digitalizado
RECETARIO_DIGITALIZADO_RAUL_ASENCIO_v1.docx

Tablas destino:
  - ob_recetas (id varchar(36), codigo, descripcion, proceso, version, activo,
                id_usuario, created_at, id_user_creator, updated_at, id_user_update)
  - ob_recetas_ingredientes (id varchar(36), receta_id, id_materia_prima,
                cantidad_base, unidad, created_at, id_user_creator, update_at, id_user_update)

Notas:
  - PKs: 32 caracteres hex sin guiones (CleanUUID)
  - FKs (id_materia_prima): 36 caracteres con guiones (UUID estándar)
  - ob_recetas usa updated_at; ob_recetas_ingredientes usa update_at (sin 'd')
  - Auditoría: id_usuario, id_user_creator, id_user_update = '1'
"""

import uuid
import os

output_dir = r"c:\fuentes\proyectos delphi\RAUL_ASENCIO\documentacion raul asencio\recetas"
output_file = os.path.join(output_dir, "PASTELERIAS-recetas-import.sql")

def clean_uuid():
    """32-character lowercase hex UUID without dashes"""
    return str(uuid.uuid4()).replace('-', '').lower()

# =============================================================================
# MATERIAS PRIMAS MAP — ge_materias_primas.id (36 chars con guiones)
# =============================================================================
MAT = {
    # --- Harinas ---
    "harina_fuerza":       "3611952c-544a-48bf-bcd6-81d6861180ec",  # HARINA GRAN FUERZA ENCARNACION
    "harina_floja":        "02d42f66-1d99-4432-acb3-f5caeea14a46",  # HARINA LLEVANT V-13
    "harina_almendra":     "72413bee-07cb-4b5e-93f2-30d9e0008524",  # ALMENDRA HARINA FINA RAMILLETE
    "harina_maiz":         "4fc5d6ed-a1b6-4187-86fa-c7e32ce84499",  # HARINA MAIZ FINA
    "almidon_maiz":        "522c7a76-c7df-43bc-976b-9b3559835540",  # ALMIDON DE MAIZ
    # --- Azúcares y edulcorantes ---
    "azucar":              "07907c6f-c6a0-4621-9c2e-e1da14df0506",  # AZUCAR BLANQUILLA
    "azucar_moreno":       "fbd29130-7ded-40eb-9e4e-f999858e52ed",  # AZUCAR MORENO AZUCARERA 25KG
    "azucar_lustre":       "8c94b644-a4af-4310-808d-99906b612be7",  # AZUCAR LUSTRE KELMY
    "azucar_glas":         "51d0654a-2f8e-4c05-b7bf-af1da84d7077",  # AZUCAR GLASS (LA SECRETA)
    "dextrosa":            "32972d1e-e9c9-4a02-a519-3bed5e78b426",  # DEXTROSA
    "maltitol":            "3f87abf3-ddd7-4011-82c8-9f6c9e2d2607",  # MALTITEX MALTITOL
    # --- Líquidos base ---
    "agua":                "73464873-063f-43af-a229-474675e74a9f",  # AGUA
    "nata_35":             "25d3b454-a91a-4102-b744-88596d13a535",  # NATA 35% PAST. DELEITAR
    "nata_uht":            "f5812d37-1bf6-46ff-ad10-38702cf06334",  # NATA UHT PRESIDENT 35.1%
    "leche_polvo":         "0beb7372-a085-4d08-b1ca-54256228739d",  # LECHE EN POLVO
    "leche_polvo_26":      "558c7248-8bff-4d60-9513-5b54bcd359f9",  # LECHE EN POLVO 26% INSULAC
    "leche_condensada":    "765df38c-a8b4-4e7a-9c52-5a3adbc52b0a",  # LECHE CONDENSADA ENT
    # --- Huevos y derivados ---
    "huevos":              "112cb844-e60d-4967-aa88-707fa41a9ee4",  # HUEVOS
    "yema_confitada":      "64420005-4995-4b9c-92cd-ed524620e58c",  # YEMA CONFITADA BLANDA TASTY
    "clara_liquida":       "684ea5a5-41d1-4909-8807-5874581f653f",  # CLARA DE HUEVO LIQUIDO OVOPAK
    "clarakel":            "3b81c77a-b5c9-4f93-8d97-0aac16ac1995",  # ALBUMINA RAPIDA CLARAKEL
    "claraval":            "4e9bfe54-2409-447f-b275-87e691841fdc",  # ALBUMINA DE HUEVO CLARAVAL
    # --- Grasas ---
    "mantequilla":         "0721a1a3-893d-49c9-b266-fb99ef9e9ed9",  # MANTEQUILLA BLOQUE CAMPINA
    "manteca_cerdo":       "79259b44-17e6-47f1-aab9-6e5cb9e9fbe0",  # MANTECA CERDO MARTINEZ
    "manteca_delite":      "38926869-1c1e-4ad3-9623-aa3270791df0",  # MANTECA DELITE DURA
    "manteca_cacao":       "c51f851f-e25d-478e-92ef-d1c53f666e66",  # MANTECA DE CACAO
    "aceite_oliva_suave":  "0f545f09-22ec-45b7-a115-5ec53f8ad046",  # ACEITE DE OLIVA SUAVE
    "aceite_oliva_virgen": "4bdc0213-5060-40c0-818f-13fd6bac4670",  # ACEITE VIRGEN EXTRA CARBONELL
    "aceite_girasol":      "2418f4ef-de66-4ab3-b4b9-ddeb78fe8a35",  # ACEITE GIRASOL ALTO OLEICO
    # --- Chocolates y coberturas ---
    "cobertura_blanca":    "0ab1ac53-af08-463d-8997-92b4b39a9126",  # COBERTURA PURA BLANCA CALLEBAUT
    "cobertura_dark":      "1350889d-90f7-47ba-bd1b-261864be5130",  # COBERTURA ARABESQUE DARK 47%
    "cobertura_leche":     "7ac65d6e-5fd1-4e67-bfd5-c6a4f814e89d",  # COBERTURA LECHE ZEYLON GOTAS
    "cacao_valor":         "28ba0b47-dbb4-437a-a277-784219c9822b",  # CACAO PURO VALOR
    "cacao_polvo":         "478d1bfa-bb26-4c32-888f-b120e060aee8",  # CACAO POLVO INDCRESA
    "pepitas_choco":       "6f3a923d-1ef7-4dc6-8ab7-03e0ca6a2394",  # PEPITAS CHOC. NEGRO CORI 900
    "chips_choco":         "a7544835-1bed-4813-a87e-05549a526555",  # GOTAS CHOCOLATE CHIPS
    # --- Frutos secos ---
    "almendra_granito":    "09e5079a-722e-4bd2-b415-8986e5c78657",  # ALMENDRA GRANITO REPELADA USA
    "avellanas_peladas":   "25718254-77da-41cd-89b8-f2b43f5d43f2",  # AVELLANAS PELADAS TOSTADAS
    "nueces_mitades":      "b8324864-87f8-4c5a-929f-f6402830f901",  # NUECES MITADES 80%
    "coco_rallado":        "65575156-b1af-4468-a891-3579d07163be",  # COCO RALLADO
    "pasta_pistacho":      "63e45d49-8547-45f3-b54b-4f9baa026cf5",  # PASTA PISTACHO KERMAN
    # --- Aromas y especias ---
    "joypaste_vainilla":   "52a61eab-098e-4382-b954-1a842cedf6c2",  # JOYPASTE VAINILLA MADAGASCAR
    "joyquick_limon":      "1146ef15-7aab-4c9c-bc87-edd1988651f3",  # JOYQUICK LIMONE
    "limon_pasta":         "709b810d-7282-4f28-84a2-8ea49143ad42",  # LIMON PASTA GR-20
    "canela_molida":       "5564d20e-80c9-4399-9f8b-ccc653f9533a",  # CANELA LAYBE MOLIDA STANDARD
    "canela_rama":         "6da794bd-e925-4094-b76c-fda0fa0cec16",  # CANELA EN RAMA
    "nuez_moscada":        "f6984be2-78a9-4014-b15c-dfe8bb3e5db7",  # NUEZ MOSCADA
    "jengibre":            "33850946-bb99-464d-856f-4f28d8c8fbf6",  # JENGIBRE
    "acido_citrico":       "977123ff-7364-474b-8385-1c9c4554f4c2",  # ACIDO CITRICO MONOHIDRATADO
    "sal":                 "bdb8a0fd-4562-425f-b721-96cd28201041",  # SAL
    # --- Levaduras, impulsores ---
    "levadura":            "204dbf47-374b-46aa-b9a0-4029794f98c5",  # LEVADURA CR SUCRA CODIPAN
    "impulsor":            "1f555d96-8273-4cb9-a551-1041d73650dc",  # IMPULSOR
    "bicarbonato_sodico":  "1fa07177-6a78-43bc-8e38-eb339f2441aa",  # BICARBONATO SODICO
    "bicarbonato_amonico": "89ed0b9e-6bcb-4d63-a2db-94e3b081d81b",  # BICARBONATO AMONICO
    "mejorante":           "6dc50c4a-4a2d-4005-8dfe-ddd219ec6032",  # MEJORANTE
    "masa_madre":          "mat-5",                                   # Masa Madre Refresco 2
    # --- Gelatinas y neutros ---
    "gelatina_oro":        "e4f32794-0276-435a-8bbf-6075b183738e",  # GELATINA ORO LAMINAS GOLD
    "neutro_spiegel":      "11b7cc1b-2d0a-438d-8145-757aa874f7ce",  # SPIEGEL NEUTRO LATA 3KG
    "bavarois_neutro":     "dae9e1e3-9a3a-49e6-a118-a1647db876ef",  # BAVAROIS NEUTRO IND
    "cuajada":             "c838d773-ffd2-40ad-beff-669c10643c17",  # CUAJADA POLVO
    # --- Preparados y semi-elaborados ---
    "cremy_gold":          "439bd8f7-1c69-4e1a-b9ef-8bffcb590843",  # CREMY GOLD
    "mella_muffin":        "74d38056-1d19-4b0a-9b7b-9787dcb4d4fe",  # MELLA MUFFIN SACO/12,5 KG
    "turron":              "2f87bb3c-4614-456f-a079-a1bd55053c8b",  # TURRON SUPREMA GRANULADO
    "cabello_angel":       "b3c5638c-839e-4cc5-a039-0c4689726ff1",  # CABELLO ANGEL GENIL
    "naranja_confitada":   "2614e224-05cb-4643-82cb-b6ce764f3886",  # NARANJA DISCOS ESCURRIDA
    # --- Galletas ---
    "galleta_lotus":       "7286d9b3-df51-4315-bc4e-ecc7498de266",  # GALLETA MOLIDA LOTUS
    "oreo_trozos":         "9519cb04-faac-4888-adaa-ff2a2da7d11d",  # GALLETA OREO TROZOS S/CREMA
    "galleta_tostada":     "63ad2a7a-95b4-4710-8a8a-4cdb62bae282",  # GALLETA ALTEZA TOSTADA
    # --- Conservas y rellenos ---
    "tomate_artesana":     "36e1cdbb-9ac1-4174-943c-cef2d0972cbc",  # TOMATE RECETA ARTESANA
    "atun_tunafit":        "46af1d7e-01e3-4db4-b66b-2e3c400b91b6",  # ATUN ACEITE GIRASOL TUNAFIT
    "zanahoria":           "7591f83f-0acf-46ea-a0cb-5912d41d0299",  # ZANAHORIAS
    # --- Colorantes ---
    "rojo_vivo_polvo":     "70c2e842-cd19-4194-8751-d91b7b6a748a",  # COLOR ROJO VIVO POLVO
    "rojo_vivo_pasta":     "910475a8-faaa-427e-8cca-617545cc224a",  # COLORAMA EN PASTA ROJO VIVO
    # --- Lácteos y quesos ---
    "yogur_griego":        "93c14b18-7d01-4fa6-b252-7ee9077bc474",  # YOGURT GRIEGO NATURAL MERCADONA
    # --- Bebidas ---
    "cafe_molido":         "482cf152-1c8f-4213-b930-647cd1f25935",  # CAFE BURDET
    "cafe_descafeinado":   "33766236-890d-484d-b7e7-01d355adf254",  # CAFE DESCAFEINADO ECOLO
    # --- Varios ---
    "vino_blanco":         "177aef2b-a19a-4005-9273-09ccfc5e21d3",  # VINO BLANCO
    "paillete_feuilletine":"d9df954c-85fc-46df-b758-eec6dce068f9",  # M7 PAILLETE FEUILLETINE
}

# =============================================================================
# RECETAS del Recetario Digitalizado v1
# =============================================================================
recipes = [
    # ── CREMAS, NATA Y TRUFAS ──
    {
        "code": "REC-021-CREMA-BUENA",
        "name": "Crema Buena",
        "process": "Infusionar agua, leche en polvo, mantequilla, canela y piel de limón. Mezclar yemas, harina de fuerza y azúcar. Verter la infusión colada y cocer hasta espesar. Escalas visibles: 1, 6, 10 y 15 L de agua.",
        "ingredients": [
            ("agua", 1000, "g"),
            ("leche_polvo", 100, "g"),
            ("mantequilla", 50, "g"),
            ("canela_rama", 1, "ud"),
            ("yema_confitada", 8, "ud"),
            ("harina_fuerza", 100, "g"),
            ("azucar", 300, "g"),
        ]
    },
    {
        "code": "REC-022-YEMA",
        "name": "Yema",
        "process": "Mezclar agua, azúcar, harina de fuerza y yemas de huevo. Cocer a fuego lento removiendo constantemente hasta espesar. Escalas visibles: 2, 4, 6, 8, 10, 12 y 15 L.",
        "ingredients": [
            ("agua", 2000, "g"),
            ("azucar", 1000, "g"),
            ("harina_fuerza", 250, "g"),
            ("yema_confitada", 20, "ud"),
        ]
    },
    {
        "code": "REC-023-CREMA-RAPIDA",
        "name": "Crema Rápida",
        "process": "Batir agua fría con Cremy Gold hasta obtener crema lisa.",
        "ingredients": [
            ("agua", 1000, "g"),
            ("cremy_gold", 400, "g"),
        ]
    },
    {
        "code": "REC-024-CREMA-CHOCO",
        "name": "Crema Choco",
        "process": "1. Añadir chocolate en pepitas después de hervir y apagar. Nota: sin cantidad ni base especificada.",
        "ingredients": [
            # ROJO: No indica cantidad de chocolate ni base exacta de crema
        ]
    },
    {
        "code": "REC-018-NATA-TRUFAS",
        "name": "Nata para Trufas",
        "process": "1. Ir batiendo de 2 L en 2 L al 3. 2. Batir al 2 cada vez que se eche la nata y luego otra vez al 3. 3. Añadir azúcar y neutro. 4. Montar al 3. Escalas para 4, 6 y 8 L.",
        "ingredients": [
            ("nata_35", 4000, "g"),
            ("azucar", 600, "g"),
            ("neutro_spiegel", 200, "g"),
        ]
    },
    {
        "code": "REC-029-TRUFA-NEGRA",
        "name": "Trufa Negra",
        "process": "1. Calentar hasta hervir. 2. Apagar y echar chocolate. 3. Pasar batidora.",
        "ingredients": [
            ("nata_35", 5000, "g"),
            ("cobertura_dark", 5000, "g"),
        ]
    },
    {
        "code": "REC-030-TRUFA-BLANCA",
        "name": "Trufa Blanca",
        "process": "1. Calentar hasta hervir. 2. Apagar y echar chocolate. 3. Pasar batidora.",
        "ingredients": [
            ("nata_35", 5000, "g"),
            ("cobertura_blanca", 6000, "g"),
        ]
    },

    # ── BOLLERÍA BÁSICA ──
    {
        "code": "REC-032-MAGDALENAS-ACEITE",
        "name": "Magdalenas Aceite",
        "process": "1. Cada bolsa 2.250 g para cocer. 2. Echar huevos antes de meter harina. Rendimiento: 11 bobas. 13 bandejas x 12 copas.",
        "ingredients": [
            ("huevos", 90, "ud"),
            ("azucar", 5184, "g"),
            ("leche_polvo", 230, "g"),
            ("agua", 2100, "g"),
            ("aceite_girasol", 5616, "g"),
            ("harina_floja", 7200, "g"),
        ]
    },
    {
        "code": "REC-033-MAGDALENAS-BIZCOCHO",
        "name": "Magdalenas de Bizcocho",
        "process": "1. Batir claras al 3. Cuando estén subidas, añadir azúcar, luego yemas y aceite. 2. Echar harina e impulsor, parar enseguida y mover a mano. 3. También se puede echar el impulsor seguido de las claras cuando hayan montado. Temp: 150 ºC. Reposo: 20 min. Rendimiento: 10 bandejas x 15 cápsulas.",
        "ingredients": [
            ("huevos", 73, "ud"),
            ("harina_floja", 2894, "g"),
            ("azucar", 2894, "g"),
            ("impulsor", 82, "g"),
            ("aceite_oliva_virgen", 625, "g"),
        ]
    },
    {
        "code": "REC-034-MAGDALENAS-NARANJA",
        "name": "Magdalenas de Naranja",
        "process": "1. Echar huevos y azúcar a la vez a velocidad 3. Cuando monten, bajar al 1. 2. Echar leche, harina y almidón a la mitad, aceite, lo que queda de harina, pasar naranja y almidón y echar. 3. Terminar de mover a mano. Reposo: 20 min. Base: Usa Magdalenas de Bizcocho.",
        "ingredients": [
            ("almidon_maiz", 1500, "g"),
            ("azucar", 200, "g"),
        ]
    },
    {
        "code": "REC-047-ROLLOS-HUEVOS",
        "name": "Rollos de Huevos",
        "process": "1. Poner los huevos al 2. 2. Batir un poco y echar azúcar. 3. Cuando se disuelva, bajar al 1 y echar mitad de aceite, harina y resto de aceite. 4. En mezclarse, parar.",
        "ingredients": [
            ("huevos", 24, "ud"),
            ("azucar", 2000, "g"),
            ("aceite_girasol", 2000, "g"),
            ("impulsor", 150, "g"),
            ("harina_floja", 5000, "g"),
        ]
    },
    {
        "code": "REC-048-ROLLOS-SIN-AZUCAR",
        "name": "Rollos Sin Azúcar",
        "process": "1. Echar huevos y maltitol a batir al 2. 2. Cuando se disuelva el maltitol, echar impulsor. 3. Mezclar y bajar al 1. 4. Echar mitad de aceite, harina y resto de aceite. 5. En mezclarse, parar.",
        "ingredients": [
            ("huevos", 24, "ud"),
            ("maltitol", 2000, "g"),
            ("aceite_girasol", 2000, "g"),
            ("impulsor", 150, "g"),
            ("harina_floja", 4500, "g"),
        ]
    },
    {
        "code": "REC-056-BORRACHOS",
        "name": "Borrachos",
        "process": "1. Pesar todo separado. 2. Poner claras a batir al 3. Cuando estén bien batidas, echar impulsor. 3. Dejar batir un poco, echar azúcar y luego amoniaco tamizado. 4. Bajar al 1, echar yemas y rápido harina tamizada. 5. Terminar a mano, antes batir al 1 un poco. Horno: 170 ºC. Rendimiento: 8 bandejas 6x4.",
        "ingredients": [
            ("huevos", 53, "ud"),
            ("harina_fuerza", 2000, "g"),
            ("harina_floja", 1000, "g"),
            ("bicarbonato_amonico", 100, "g"),
            ("impulsor", 50, "g"),
            ("azucar", 1500, "g"),
        ]
    },
    {
        "code": "REC-057-PREPARADO-MANZANA",
        "name": "Preparado de Manzana / Muffins",
        "process": "No aparece proceso. Nota: Confirmar si es bizcocho completo o preparado de fruta para muffins.",
        "ingredients": [
            ("azucar_moreno", 500, "g"),
            ("limon_pasta", 50, "g"),
            ("canela_molida", 30, "g"),
            ("nuez_moscada", 20, "g"),
            ("jengibre", 10, "g"),
        ]
    },

    # ── SEMIFRÍOS Y TARTAS FRÍAS ──
    {
        "code": "REC-001-GELATINA-SEMIFRIO",
        "name": "Gelatina Semifrío",
        "process": "No aparece proceso. Fecha anotada: 17/02. Nota: Unidades no especificadas. Confirmar cifra final de azúcar.",
        "ingredients": [
            ("azucar", 6000, "g"),
            ("agua", 4500, "g"),
            ("leche_polvo", 500, "g"),
            ("gelatina_oro", 750, "g"),
        ]
    },
    {
        "code": "REC-026-VASOS-YOGUR",
        "name": "Vasos de Yogur",
        "process": "1. En cubo grande, echar yogures y queso y batir hasta mezclar bien. 2. Poner nata a batir al 2. Antes de que monte, cuando se vea crema, echar yogur con queso al 1 y a continuación el semifrío. 3. Cuando esté mezclado, parar y poner en vasos preparados con bizcocho. Rendimiento: 6 bandejas aprox.",
        "ingredients": [
            ("nata_uht", 9000, "g"),
            ("yogur_griego", 8000, "g"),
            ("bavarois_neutro", 4000, "g"),
        ]
    },
    {
        "code": "REC-035-BIZCOCHOS-SEMIFRIOS",
        "name": "Bizcochos Semifríos",
        "process": "1. Batir huevos y azúcar y montarlo. 2. Echar harina con almidón y cacao. 3. Echar al 1 para terminar de mezclar. Horno: 200 ºC. Tiempo: 7 min.",
        "ingredients": [
            ("huevos", 55, "ud"),
            ("azucar", 1500, "g"),
            ("harina_floja", 1050, "g"),
            ("almidon_maiz", 150, "g"),
            ("cacao_polvo", 300, "g"),
        ]
    },
    {
        "code": "REC-036-TARTA-TRES-CHOCOLATES",
        "name": "Tarta Tres Chocolates",
        "process": "1. Picar galletas, deshacer mantequilla, mezclar y poner en moldes. 2. Batir 3 L de agua y poner 300 g de leche en polvo. 3. Separar en bol leche para mezclar 14 sobres de cuajada. 4. En olla, poner leche y nata a calentar. A 85 ºC echar cuajada y mover. 5. Echar primer chocolate, remover, retirar del fuego y echar en la galleta. 6. Repetir con todos los chocolates. Temp: 85 ºC. Moldes: M18 y M14.",
        "ingredients": [
            ("galleta_tostada", 1600, "g"),
            ("mantequilla", 900, "g"),
            ("nata_35", 9000, "g"),
            ("cuajada", 42, "ud"),
            ("agua", 9000, "g"),
            ("leche_polvo", 900, "g"),
            ("cobertura_blanca", 2000, "g"),
            ("cobertura_leche", 2000, "g"),
            ("cobertura_dark", 2000, "g"),
        ]
    },
    {
        "code": "REC-067-BOMBAS-MARACUYA-MANGO",
        "name": "Bombas Maracuyá / Mango",
        "process": "No aparece proceso. Rendimiento: 156 o 105 bombas según anotación. Nota: 2700 Semi para 6 L frío.",
        "ingredients": [
            ("nata_35", 4000, "g"),
            ("cobertura_blanca", 2000, "g"),
            ("yema_confitada", 500, "g"),
            ("bavarois_neutro", 1800, "g"),
        ]
    },
    {
        "code": "REC-080-TARTA-YOGURT",
        "name": "Tarta Yogurt",
        "process": "No aparece proceso. Escalado: DOBLE 5 T.1 / 4 T.2. Nota: Unidades no indicadas en mezcla principal.",
        "ingredients": [
            ("nata_35", 2000, "g"),
            ("bavarois_neutro", 1200, "g"),
            ("yogur_griego", 1500, "g"),
            ("galleta_tostada", 1200, "g"),
            ("mantequilla", 750, "g"),
        ]
    },

    # ── NAVIDAD Y CLÁSICOS DE CAMPAÑA ──
    {
        "code": "REC-007-TOCINOS-CARAMELO",
        "name": "Tocinos de Cielo Caramelo",
        "process": "1. Poner a hervir. Rendimiento: para 8 tocineras.",
        "ingredients": [
            ("agua", 800, "g"),
            ("azucar", 1900, "g"),
        ]
    },
    {
        "code": "REC-008-TOCINOS-MEZCLA",
        "name": "Tocinos de Cielo Mezcla",
        "process": "1. Poner todo y batir con batidora. Nota: Dibujos con anotación Poner 2 tazas.",
        "ingredients": [
            ("yema_confitada", 60, "ud"),
            ("huevos", 40, "ud"),
            ("leche_polvo", 200, "g"),
        ]
    },
    {
        "code": "REC-009-TORTAS-MANTECA",
        "name": "Tortas Manteca",
        "process": "1. Mezclar levadura con un poco de agua. 2. Poner en máquina un poco de agua e ir añadiendo lo demás. 3. Lo último, la levadura. Peso bola: 90 g. Escala x2 visible.",
        "ingredients": [
            ("harina_fuerza", 1500, "g"),
            ("harina_floja", 1500, "g"),
            ("manteca_delite", 300, "g"),
            ("agua", 2000, "g"),
            ("sal", 60, "g"),
            ("levadura", 90, "g"),
            ("masa_madre", 30, "g"),
        ]
    },
    {
        "code": "REC-010-TOCINOS-PRODUCCION",
        "name": "Tocinos Producción",
        "process": "1. En cazo hervir agua y azúcar hasta 112 ºC. 2. Mezclar en bol yemas, huevos y leche. Horno: 1:30 h o 2:00 h, 92 a 98 ºC, humedad 60.",
        "ingredients": [
            ("agua", 1000, "g"),
            ("azucar", 4000, "g"),
            ("yema_confitada", 60, "ud"),
            ("huevos", 40, "ud"),
            ("leche_polvo", 200, "g"),
        ]
    },
    {
        "code": "REC-017-PASTELES-GLORIA",
        "name": "Pasteles de Gloria",
        "process": "1. Batir claras al 3. 2. Cuando monte, poner al 1 y echar azúcar. 3. Poner al 2. Escalas: 1 L claras / 1.200 azúcar; 1,5 L claras / 1.800 azúcar.",
        "ingredients": [
            ("clara_liquida", 250, "g"),
            ("azucar", 900, "g"),
        ]
    },
    {
        "code": "REC-068-SEQUILLOS",
        "name": "Sequillos",
        "process": "1. Batir 15 minutos a velocidad 3. 2. Hornear. Horno: 160 ºC. Tiempo: 45 min. Ventilador: 2. Sin abrir.",
        "ingredients": [
            ("harina_fuerza", 3000, "g"),
            ("aceite_girasol", 2250, "g"),
            ("impulsor", 80, "g"),
            ("bicarbonato_sodico", 80, "g"),
            ("huevos", 48, "ud"),
        ]
    },
    {
        "code": "REC-069-CAREO-SEQUILLOS",
        "name": "Careo Sequillos",
        "process": "1. Batir agua con Claragel. 2. En un cazo poner azúcar y agua a punto de hebra floja. Temp: aprox. 104 ºC.",
        "ingredients": [
            ("agua", 500, "g"),
            ("clarakel", 50, "g"),
            ("azucar", 3000, "g"),
            ("agua", 1000, "g"),
        ]
    },
    {
        "code": "REC-070-MANTECA-ACEITE",
        "name": "Manteca de Aceite",
        "process": "No aparece proceso. Escala x2 visible.",
        "ingredients": [
            ("harina_floja", 4000, "g"),
            ("manteca_delite", 1000, "g"),
            ("aceite_oliva_virgen", 1000, "g"),
            ("azucar", 1000, "g"),
        ]
    },
    {
        "code": "REC-071-MANTECA-CORRIENTE",
        "name": "Manteca Corriente",
        "process": "No aparece proceso. Escala x3: 9 kg azúcar, 9 kg manteca, 18 kg harina.",
        "ingredients": [
            ("azucar", 3000, "g"),
            ("manteca_delite", 3000, "g"),
            ("harina_floja", 6000, "g"),
        ]
    },
    {
        "code": "REC-072-ALMENDRADO-COCO",
        "name": "Almendrado de Coco",
        "process": "No aparece proceso. Confirmado por Raúl.",
        "ingredients": [
            ("coco_rallado", 1500, "g"),
            ("azucar", 1000, "g"),
            ("huevos", 5, "ud"),
            ("cabello_angel", 200, "g"),
        ]
    },
    {
        "code": "REC-073-ALMENDRADO-ALMENDRA",
        "name": "Almendrado de Almendra",
        "process": "No aparece proceso. Confirmado por Raúl.",
        "ingredients": [
            ("harina_almendra", 1500, "g"),
            ("azucar", 1000, "g"),
            ("huevos", 10, "ud"),
            ("yema_confitada", 200, "g"),
            ("limon_pasta", 40, "g"),
            ("cabello_angel", 300, "g"),
            ("almendra_granito", 500, "g"),
        ]
    },
    {
        "code": "REC-074-TORTICAS-FINAS",
        "name": "Torticas Finas",
        "process": "1. No aparece proceso textual; indica Tostar junto a almendra. Nota: Esencia de anís preguntar a Raúl.",
        "ingredients": [
            ("aceite_oliva_virgen", 2000, "g"),
            ("harina_floja", 4000, "g"),
            ("azucar", 1500, "g"),
            ("yema_confitada", 72, "ud"),
            ("almendra_granito", 1500, "g"),
        ]
    },
    {
        "code": "REC-075-NEVADITOS",
        "name": "Nevaditos",
        "process": "No aparece proceso. Escala x3 visible: 4.080 manteca, 1.920 vino blanco.",
        "ingredients": [
            ("harina_floja", 2000, "g"),
            ("manteca_delite", 1360, "g"),
            ("vino_blanco", 640, "g"),
        ]
    },
    {
        "code": "REC-076-POLVORON-HARINA",
        "name": "Polvorón Harina",
        "process": "No aparece proceso.",
        "ingredients": [
            ("harina_floja", 6000, "g"),
            ("azucar_lustre", 1500, "g"),
            ("manteca_delite", 3000, "g"),
        ]
    },
    {
        "code": "REC-077-POLVORONES-ALMENDRA",
        "name": "Polvorones Almendra",
        "process": "No aparece proceso. Escala x3 visible.",
        "ingredients": [
            ("harina_floja", 2000, "g"),
            ("manteca_delite", 1000, "g"),
            ("azucar_glas", 500, "g"),
            ("almendra_granito", 300, "g"),
        ]
    },
    {
        "code": "REC-078-MANTECADO-ANTEQUERA",
        "name": "Mantecado Antequera",
        "process": "No aparece proceso. Escala x3 visible. Unidades presumiblemente gramos.",
        "ingredients": [
            ("manteca_delite", 1800, "g"),
            ("azucar_lustre", 500, "g"),
            ("harina_floja", 2400, "g"),
            ("clara_liquida", 260, "g"),
        ]
    },

    # ── CHOCOLATE, BAÑOS Y ROLLS ──
    {
        "code": "REC-038-TORTA-BOBA-SACHER",
        "name": "Torta Boba / Tarta Sacher",
        "process": "1. Poner huevos a batir al 3. 2. Cuando estén esponjosos, echar impulsor, batir y subir. 3. Echar azúcar y dejar batir. 4. Echar limón, nata y leche condensada. 5. Bajar al 1 y echar aceite, harina y cacao. 6. Añadir pepitas y mezclar bien. Rendimiento: 7 bandejas 2.250-2.400 g.",
        "ingredients": [
            ("nata_35", 1000, "g"),
            ("leche_condensada", 1000, "g"),
            ("azucar", 4000, "g"),
            ("aceite_girasol", 2000, "g"),
            ("harina_floja", 4000, "g"),
            ("impulsor", 120, "g"),
            ("limon_pasta", 50, "g"),
            ("huevos", 48, "ud"),
            ("pepitas_choco", 2000, "g"),
            ("cacao_polvo", 500, "g"),
        ]
    },
    {
        "code": "REC-043-ROLL-PISTACHO",
        "name": "Roll Pistacho",
        "process": "5 kg choco blanco + 1 kg pistacho concentrado.",
        "ingredients": [
            ("cobertura_blanca", 5000, "g"),
            ("pasta_pistacho", 1000, "g"),
        ]
    },
    {
        "code": "REC-043B-ROLL-TURRON",
        "name": "Roll Turrón",
        "process": "2 kg choco blanco + 3 kg turrón.",
        "ingredients": [
            ("cobertura_blanca", 2000, "g"),
            ("turron", 3000, "g"),
        ]
    },
    {
        "code": "REC-052-BANO-KINDER",
        "name": "Baño Kinder",
        "process": "No aparece proceso.",
        "ingredients": [
            ("cobertura_blanca", 1500, "g"),
            ("cobertura_dark", 500, "g"),
            ("manteca_cacao", 400, "g"),
            ("avellanas_peladas", 400, "g"),
        ]
    },
    {
        "code": "REC-052-BANO-LOTUS",
        "name": "Baño Lotus",
        "process": "No aparece proceso.",
        "ingredients": [
            ("cobertura_dark", 2400, "g"),
            ("cobertura_blanca", 1200, "g"),
            ("galleta_lotus", 400, "g"),
            ("manteca_cacao", 400, "g"),
            ("sal", 30, "g"),
            ("nuez_moscada", 30, "g"),
            ("jengibre", 20, "g"),
            ("canela_molida", 20, "g"),
        ]
    },
    {
        "code": "REC-052-BANO-PISTACHO",
        "name": "Baño Pistacho",
        "process": "No aparece proceso.",
        "ingredients": [
            ("cobertura_blanca", 2000, "g"),
            ("manteca_cacao", 400, "g"),
            ("pasta_pistacho", 130, "g"),
        ]
    },
    {
        "code": "REC-062-VERIGATO-CK",
        "name": "Verigato C.K / Pastel",
        "process": "No aparece proceso. Nota: Confirmar unidad del chocolate blanco.",
        "ingredients": [
            ("cobertura_blanca", 6000, "g"),
            ("rojo_vivo_pasta", 6, "g"),
        ]
    },
    {
        "code": "REC-064-CHOCOLATE-VARIOS",
        "name": "Chocolate Varios",
        "process": "No aparece proceso. Escalas simple, doble y triple. Nota: No especifica unidades.",
        "ingredients": [
            ("cacao_valor", 1480, "g"),
            ("agua", 5926, "g"),
            ("leche_polvo", 593, "g"),
        ]
    },
    {
        "code": "REC-066-CRUJIENTE-PISTACHO",
        "name": "Crujiente Pistacho",
        "process": "No aparece proceso. Nota: Confirmar unidades de chocolate blanco y pasta pistacho.",
        "ingredients": [
            ("cobertura_blanca", 1200, "g"),
            ("pasta_pistacho", 1040, "g"),
            ("paillete_feuilletine", 720, "g"),
            ("aceite_oliva_suave", 240, "g"),
        ]
    },

    # ── GRANIZADOS Y BEBIDAS ──
    {
        "code": "REC-058-GRANIZADO-LIMON",
        "name": "Granizado Limón",
        "process": "No aparece proceso. Bloque adicional: Concentrado limón (70 g limón, 175 g azúcar, 120 g ácido cítrico, 200 g agua).",
        "ingredients": [
            ("azucar", 1500, "g"),
            ("dextrosa", 300, "g"),
            ("agua", 10000, "g"),
        ]
    },
    {
        "code": "REC-058B-CONCENTRADO-LIMON",
        "name": "Concentrado Limón",
        "process": "Bloque adicional del granizado limón.",
        "ingredients": [
            ("limon_pasta", 70, "g"),
            ("azucar", 175, "g"),
            ("acido_citrico", 120, "g"),
            ("agua", 200, "g"),
        ]
    },
    {
        "code": "REC-059-GRANIZADO-CAFE",
        "name": "Granizado Café",
        "process": "No aparece proceso.",
        "ingredients": [
            ("azucar", 1300, "g"),
            ("dextrosa", 300, "g"),
            ("cafe_molido", 750, "g"),
            ("agua", 10000, "g"),
        ]
    },
    {
        "code": "REC-059B-GRANIZADO-DESCAFEINADO",
        "name": "Granizado Descafeinado",
        "process": "No aparece proceso. Sustituye azúcar por maltitol.",
        "ingredients": [
            ("maltitol", 1300, "g"),
            ("dextrosa", 300, "g"),
            ("cafe_descafeinado", 750, "g"),
            ("agua", 10000, "g"),
        ]
    },
    {
        "code": "REC-060-CEBADA",
        "name": "Cebada",
        "process": "No aparece proceso.",
        "ingredients": [
            ("azucar", 1300, "g"),
            ("dextrosa", 300, "g"),
            ("agua", 10000, "g"),
            # cebada 750g — no existe en ge_materias_primas
        ]
    },
    {
        "code": "REC-061-LECHE-PREPARADA",
        "name": "Leche Preparada",
        "process": "No aparece proceso. Nota: Limón: no indica si zumo, ralladura o concentrado.",
        "ingredients": [
            ("agua", 10000, "g"),
            ("leche_polvo_26", 1000, "g"),
            ("azucar", 1300, "g"),
            ("dextrosa", 300, "g"),
            ("canela_rama", 3, "ud"),
        ]
    },

    # ── PASTELERÍA GENERAL Y VARIOS ──
    {
        "code": "REC-012-MINUITA",
        "name": "Miñuita",
        "process": "1. Sacar planchas y pasar erizo. Rendimiento: para 17-18.",
        "ingredients": [
            ("harina_floja", 15000, "g"),
            ("aceite_oliva_virgen", 5250, "g"),
            ("sal", 450, "g"),
            ("bicarbonato_sodico", 150, "g"),
        ]
    },
    {
        "code": "REC-013-EMPANADA-GALLEGA",
        "name": "Empanada Gallega",
        "process": "1. Mezclar relleno. 2. Poner 1060 g cada plancha y tapar. 3. Recortar bordes.",
        "ingredients": [
            ("tomate_artesana", 2000, "g"),
            ("atun_tunafit", 1500, "g"),
            ("huevos", 30, "ud"),
        ]
    },
    {
        "code": "REC-014-PETISU",
        "name": "Petisú",
        "process": "1. En olla poner agua y manteca. 2. Cuando hierva, echar harina y apagar. Mezclar bien. 3. Poner en mesa para enfriar. 4. Poner en máquina al 1 e ir echando huevos. 5. Una vez mezclado, 5 minutos al 3. Precalentar horno a 220 ºC. Fase 1: 4 min a 180 ºC, humedad 20, ventilador 2. Fase 2: 25 min a 160 ºC, humedad 0, ventilador 2.",
        "ingredients": [
            ("agua", 2000, "g"),
            ("manteca_cerdo", 700, "g"),
            ("harina_floja", 1800, "g"),
            ("huevos", 42, "ud"),
        ]
    },
    {
        "code": "REC-015-MERENGUE-SIN-AZUCAR",
        "name": "Merengue Sin Azúcar",
        "process": "1. Hervir maltitol con agua en olla. 2. Batir Claragel con agua en máquina.",
        "ingredients": [
            ("maltitol", 1200, "g"),
            ("agua", 500, "g"),
            ("clarakel", 500, "g"),
            ("agua", 500, "g"),
        ]
    },
    {
        "code": "REC-016-MERENGUE-PMG",
        "name": "Batido Merengue P-M-G",
        "process": "1. Poner en máquina a batir al 2 agua + Claragel + Claraval. 2. En olla, azúcar + agua hasta punto bola floja, 120 ºC. 3. Al llegar a 120 ºC, poner máquina al 3 e ir echando lo de la olla. 4. Poner al 2 hasta que toque y no queme. Escalas: Pequeño 500 ml / 1.200 g; Grande 1,5 L / 3.600 g.",
        "ingredients": [
            ("agua", 1000, "g"),
            ("clarakel", 50, "g"),
            ("claraval", 50, "g"),
            ("azucar", 2400, "g"),
        ]
    },
    {
        "code": "REC-031-MASCARPONE",
        "name": "Mascarpone",
        "process": "1. Calentar nata en olla. 2. Cuando esté caliente, sacar 2 jarras y mezclar en bol con almidón y varilla. 3. Echar en la olla con la nata calentando los 3 tapones de ácido cítrico y mover. 4. Incorporar mezcla disuelta de nata y almidón. 5. Mover hasta que espese y se vea hervir. 6. Extender en bandeja para enfriar. Tapar con film para que no haga costra.",
        "ingredients": [
            ("nata_35", 6000, "g"),
            ("almidon_maiz", 300, "g"),
            ("acido_citrico", 5, "g"),
        ]
    },
    {
        "code": "REC-037-BIZCOCHO-ALMENDRIA",
        "name": "Bizcocho Almendria / Tarias",
        "process": "1. Desclarar huevos. En yemas, echar pasta de limón y agua. 2. Pesar almendra molida, harina almendra y harina floja en recipiente. 3. Por otro lado, almidón y azúcar. 4. Batir claras al 3. Cuando estén muy subidas, echar almidón y azúcar. Dejar batir. 5. Echar yemas y poner al 1. 6. Cuando mezcle, echar mezcla de harinas y almendra picada. Parar máquina. 7. Mover a mano. Rendimiento: Cuadradas 1: 250 g / T.3: 1.200 g en moldes.",
        "ingredients": [
            ("huevos", 70, "ud"),
            ("almendra_granito", 1000, "g"),
            ("harina_almendra", 1000, "g"),
            ("almidon_maiz", 400, "g"),
            ("agua", 200, "g"),
            ("limon_pasta", 1, "ud"),
            ("azucar", 400, "g"),
            ("harina_floja", 1130, "g"),
            ("impulsor", 40, "g"),
        ]
    },
    {
        "code": "REC-045-TARTA-QUESO",
        "name": "Tarta de Queso",
        "process": "1. Poner Philadelphia y yogures en cubo y triturar bien. 2. En otro cubo poner 7 L nata y queso Manchego y triturar bien. 3. Unir mezclas; texto final parcialmente tachado. Rendimiento: salen 31.",
        "ingredients": [
            ("galleta_tostada", 4000, "g"),
            ("galleta_lotus", 1000, "g"),
            ("mantequilla", 2500, "g"),
            ("yogur_griego", 12, "ud"),
            ("nata_35", 7000, "g"),
            ("huevos", 150, "ud"),
            ("yema_confitada", 515, "g"),
            ("azucar", 2500, "g"),
            ("harina_floja", 300, "g"),
        ]
    },
    {
        "code": "REC-049-MUFFINS-BROWNIE",
        "name": "Muffins / Brownie",
        "process": "1. Batir huevos. 2. Cuando se vean esponjosos, echar agua al 2 y aceite a continuación. 3. Echar saco de muffin, trufa negra y cacao. 4. Por último, pepitas de chocolate. Mezclar bien. Peso por molde: 2.500 g. Rendimiento: 10-11 unidades.",
        "ingredients": [
            ("huevos", 75, "ud"),
            ("agua", 3125, "g"),
            ("aceite_girasol", 4375, "g"),
            ("mella_muffin", 12500, "g"),
            ("pepitas_choco", 3000, "g"),
            ("cacao_polvo", 250, "g"),
        ]
    },
    {
        "code": "REC-054-RED-VELVET",
        "name": "Red Velvet",
        "process": "No aparece proceso. Parece compartir método con Muffins. Agua y aceite sin unidad.",
        "ingredients": [
            ("huevos", 75, "ud"),
            ("agua", 3125, "g"),
            ("aceite_girasol", 4375, "g"),
            ("mella_muffin", 12500, "g"),
            ("cacao_polvo", 50, "g"),
            ("rojo_vivo_polvo", 50, "g"),
            ("rojo_vivo_pasta", 10, "g"),
        ]
    },
    {
        "code": "REC-063-CARROT-CAKE",
        "name": "C.K Bizcocho / Carrot Cake",
        "process": "1. Echar huevos y luego azúcar. 2. Cuando haya batido y disuelto azúcar, echar impulsor. Mezclar. 3. Batir al 2 y echar harina. 4. Echar aceite y mezclar. 5. Bajar al 1 y echar almendra, nueces y zanahoria. 6. Cuando esté mezclado, parar y poner en moldes talla 1 casi hasta arriba.",
        "ingredients": [
            ("impulsor", 170, "g"),
            ("azucar_moreno", 4300, "g"),
            ("huevos", 83, "ud"),
            ("aceite_oliva_virgen", 2600, "g"),
            ("harina_floja", 3880, "g"),
            ("sal", 20, "g"),
            ("jengibre", 20, "g"),
            ("nuez_moscada", 20, "g"),
            ("harina_almendra", 1700, "g"),
            ("nueces_mitades", 1700, "g"),
            ("canela_molida", 34, "g"),
            ("limon_pasta", 260, "g"),
            ("zanahoria", 5000, "g"),
        ]
    },
    {
        "code": "REC-065-PASTAS-TE",
        "name": "Pastas de Té",
        "process": "1. Calentar mantequilla hasta pomada. 2. Mezclar mantequilla con azúcar lustre al 1. 3. Poner sal y vainilla. 4. Cuando esté mezclado, echar nata. 5. Luego echar harina al 1. 6. Repartir. Escala x2 visible.",
        "ingredients": [
            ("mantequilla", 800, "g"),
            ("azucar_lustre", 400, "g"),
            ("nata_uht", 250, "g"),
            ("sal", 10, "g"),
            ("joypaste_vainilla", 5, "g"),
            ("harina_floja", 1100, "g"),
        ]
    },
    {
        "code": "REC-079-FROSTING-CARROT",
        "name": "Frosting Carrot Cake",
        "process": "No aparece proceso. No aparece método de mezcla. Rendimiento: aprox. 15 o 16 talla 1.",
        "ingredients": [
            ("mantequilla", 1575, "g"),
            ("dextrosa", 4500, "g"),
        ]
    },
]

# =============================================================================
# GENERATE SQL
# =============================================================================
with open(output_file, 'w', encoding='utf-8') as f:
    f.write("-- ==========================================================================\n")
    f.write("-- SQL Import Script for ob_recetas and ob_recetas_ingredientes\n")
    f.write("-- Generated from: RECETARIO_DIGITALIZADO_RAUL_ASENCIO_v1.docx\n")
    f.write("-- Generated on: 2026-06-04\n")
    f.write("-- Total recetas: {}\n".format(len([r for r in recipes if r["ingredients"]])))
    f.write("-- ==========================================================================\n\n")
    f.write("/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;\n\n")

    # --- ob_recetas ---
    valid_recipes = [r for r in recipes if r["ingredients"]]
    f.write("-- ----- Inserciones en ob_recetas ({} recetas con ingredientes) -----\n".format(len(valid_recipes)))

    receta_id_map = {}  # code -> 32-char UUID

    for r in recipes:
        r_id = clean_uuid()
        receta_id_map[r["code"]] = r_id

        proc = r["process"].replace("'", "''").replace("\\", "\\\\")
        desc = r["name"].replace("'", "''")

        f.write("INSERT INTO `ob_recetas` (\n")
        f.write("  `id`, `codigo`, `descripcion`, `proceso`, `version`, `activo`, `id_usuario`, `id_user_creator`, `id_user_update`\n")
        f.write(") VALUES (\n")
        f.write("  '{}', '{}', '{}', '{}', '1.0', 1, '1', '1', '1'\n".format(r_id, r["code"], desc, proc))
        f.write(");\n\n")

    # --- ob_recetas_ingredientes ---
    total_ing = 0
    skipped_recipes = []

    for r in recipes:
        if not r["ingredients"]:
            skipped_recipes.append(r["code"])
            continue

        receta_id = receta_id_map[r["code"]]
        f.write("-- Ingredientes de: {} ({})\n".format(r["name"], r["code"]))

        for ing_key, qty, unit in r["ingredients"]:
            if ing_key not in MAT:
                f.write("-- TODO: Material '{}' no encontrado en ge_materias_primas (qty={} {})\n".format(ing_key, qty, unit))
                continue

            ing_id = clean_uuid()
            materia_id = MAT[ing_key]

            f.write("INSERT INTO `ob_recetas_ingredientes` (\n")
            f.write("  `id`, `receta_id`, `id_materia_prima`, `cantidad_base`, `unidad`, `id_user_creator`, `id_user_update`\n")
            f.write(") VALUES (\n")
            f.write("  '{}', '{}', '{}', {:.4f}, '{}', '1', '1'\n".format(
                ing_id, receta_id, materia_id, qty, unit))
            f.write(");\n")
            total_ing += 1

        f.write("\n")

    if skipped_recipes:
        f.write("-- ==========================================================================\n")
        f.write("-- RECETAS SIN INGREDIENTES (omitidas de ob_recetas_ingredientes):\n")
        for code in skipped_recipes:
            f.write("--   {}\n".format(code))
        f.write("-- ==========================================================================\n\n")

    f.write("/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;\n")

print(f"Generated SQL script at: {output_file}")
print(f"Total recipes: {len(recipes)}")
print(f"Total recipes with ingredients: {len([r for r in recipes if r['ingredients']])}")
print(f"Total ingredient rows: {total_ing}")
print(f"Skipped recipes (no ingredients): {len(skipped_recipes)}")
if os.path.exists(output_file):
    print(f"File size: {os.path.getsize(output_file)} bytes")
