-- Migration 011: Vytvoření tabulky product_variants pro správu velikostních variant
-- Každá velikost produktu má vlastní sklad, cenu a dostupnost

-- 1. Vytvoření tabulky product_variants
CREATE TABLE IF NOT EXISTS product_variants (
  id SERIAL PRIMARY KEY,
  product_id INT NOT NULL REFERENCES products(id) ON DELETE CASCADE,
  size VARCHAR(50),  -- Velikost (např. "XL", "140", "0.75L") - může být NULL pro produkty bez velikostí
  price NUMERIC(10,2) NOT NULL,
  stock INT NOT NULL DEFAULT 0,
  sku VARCHAR(100), -- Skladové číslo varianty (např. "HC0450-XL")
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 2. Vytvoření indexů pro rychlé vyhledávání
CREATE INDEX idx_variants_product_id ON product_variants(product_id);
CREATE INDEX idx_variants_size ON product_variants(size);
CREATE INDEX idx_variants_sku ON product_variants(sku);

-- 3. Migrace existujících dat z products.sizes[] do product_variants
-- Pro každý produkt s velikostmi vytvoříme samostatné varianty
DO $$
DECLARE
  prod RECORD;
  size_val TEXT;
BEGIN
  -- Projdeme všechny produkty
  FOR prod IN SELECT id, title, price, stock, sizes, code FROM products LOOP
    
    -- Pokud má produkt velikosti (pole není prázdné)
    IF array_length(prod.sizes, 1) > 0 THEN
      -- Vytvoříme variantu pro každou velikost
      FOREACH size_val IN ARRAY prod.sizes LOOP
        INSERT INTO product_variants (product_id, size, price, stock, sku)
        VALUES (
          prod.id,
          size_val,
          prod.price,  -- Zatím všechny varianty mají stejnou cenu
          prod.stock,  -- Zatím všechny varianty mají stejný sklad (později se rozdělí)
          CASE 
            WHEN prod.code IS NOT NULL AND prod.code != '' 
            THEN prod.code || '-' || size_val
            ELSE NULL
          END
        );
      END LOOP;
    ELSE
      -- Produkt nemá velikosti - vytvoříme jednu variantu bez size
      INSERT INTO product_variants (product_id, size, price, stock, sku)
      VALUES (
        prod.id,
        NULL,
        prod.price,
        prod.stock,
        prod.code
      );
    END IF;
    
  END LOOP;
  
  RAISE NOTICE 'Migrace dokončena - vytvořeny varianty pro všechny produkty';
END $$;

-- 4. Upravíme order_items, aby ukládaly variant_id místo product_id
-- Nejdřív přidáme nový sloupec
ALTER TABLE order_items ADD COLUMN IF NOT EXISTS variant_id INT REFERENCES product_variants(id) ON DELETE SET NULL;

-- 5. Vytvoříme index pro variant_id v order_items
CREATE INDEX IF NOT EXISTS idx_order_items_variant_id ON order_items(variant_id);

-- 6. Komentáře pro dokumentaci
COMMENT ON TABLE product_variants IS 'Velikostní varianty produktů s vlastní cenou a skladem';
COMMENT ON COLUMN product_variants.size IS 'Velikost varianty (XL, 140, 0.75L atd.) - NULL pro produkty bez velikostí';
COMMENT ON COLUMN product_variants.price IS 'Cena této konkrétní varianty';
COMMENT ON COLUMN product_variants.stock IS 'Skladová dostupnost této varianty';
COMMENT ON COLUMN product_variants.sku IS 'Jedinečné SKU pro tuto variantu (např. HC0450-XL)';
COMMENT ON COLUMN order_items.variant_id IS 'Odkaz na konkrétní velikostní variantu produktu';

-- POZNÁMKA: Sloupce sizes a stock v tabulce products můžeme později odstranit
-- když bude celá aplikace používat product_variants
-- ALTER TABLE products DROP COLUMN sizes;
-- ALTER TABLE products DROP COLUMN stock;
