-- ============================================================
-- SP: cedlab_Chart_UL1
-- Metadata dei sottostanti per il grafico V2.
-- Estende FSWeb_Chart_UL con:
--   IsWorstOf, PriceWorst, PriceWorstPerc,
--   NumPrezziCFT, NomeCFT,
--   BarrieraCouponPerc, BarrieraCapitalePerc,
--   TriggerAutocallPerc, AutocallValue
--
-- Ordinato: IsWorstOf DESC (worst-of nella prima riga)
--
-- NOTA: se questa SP esiste già nel DB con questo nome e restituisce
--       già tutte queste colonne, questo file è solo documentazione.
--       Eseguilo solo se la SP non esiste o mancano le colonne.
--
-- ADATTAMENTO RICHIESTO: stessi nomi tabella del file cedlab_Chart_AllSeriesV2.sql
-- ============================================================

USE [FirstSolutionDB]
GO

CREATE OR ALTER PROCEDURE [dbo].[cedlab_Chart_UL1]
    @isin NVARCHAR(12)
AS
BEGIN
    SET NOCOUNT ON;

    -- Numero prezzi CTF disponibili (usato per il sub-titolo)
    DECLARE @NumPrezziCFT INT;
    DECLARE @IDCertificates INT;
    DECLARE @Nominal DECIMAL(18,6);
    DECLARE @NomeCFT NVARCHAR(200);

    SELECT TOP 1
        @IDCertificates = c.IDCertificates,     -- <<< adatta
        @Nominal        = c.Nominal_amount,      -- <<< adatta
        @NomeCFT        = c.Descrizione + ' - ' + c.ISIN  -- <<< adatta
    FROM [dbo].[Certificates] c                  -- <<< adatta
    WHERE c.ISIN = @isin;

    SELECT @NumPrezziCFT = COUNT(*)
    FROM [dbo].[CFT_PriceHistory]                -- <<< adatta
    WHERE IDCertificates = @IDCertificates;

    -- Prezzo attuale worst-of (prezzo corrente / strike * 100)
    -- La logica di IsWorstOf dipende dalla tua definizione (es: peggior performer)
    SELECT
        u.IDCertificates,
        u.IDUnderlyings,
        u.StartDate,                              -- <<< adatta
        u.Strike,                                 -- <<< adatta
        -- Percentuali barriere (es: BarrieraCoupon / Nominal * 100)
        u.BarrieraCouponPerc,                     -- <<< adatta o calcola
        u.BarrieraCoupon,                         -- <<< adatta (valore assoluto)
        u.BarrieraCapitalePerc,                   -- <<< adatta o calcola
        u.BarrieraCapitale,                       -- <<< adatta (valore assoluto)
        u.Name                    AS Sottostante,  -- <<< adatta nome colonna
        u.IsWorstOf,                              -- <<< adatta: 1=worst-of, 0=altri
        -- Prezzo attuale worst-of: 0 per non-worst-of
        CASE WHEN u.IsWorstOf = 1
             THEN ISNULL(last_px.Px_close, 0)     -- <<< adatta: ultimo prezzo disponibile
             ELSE 0
        END                       AS PriceWorst,
        CASE WHEN u.IsWorstOf = 1 AND u.Strike > 0
             THEN ISNULL(last_px.Px_close, 0) / u.Strike * 100
             ELSE 0
        END                       AS PriceWorstPerc,
        @NumPrezziCFT             AS NumPrezziCFT,
        @NomeCFT                  AS NomeCFT,
        ISNULL(u.TriggerAutocallPerc, 0) AS TriggerAutocallPerc,  -- <<< adatta
        ISNULL(u.AutocallValue, 0)       AS AutocallValue          -- <<< adatta
    FROM [dbo].[Underlyings] u                    -- <<< adatta nome tabella
    -- Join per ottenere l'ultimo prezzo disponibile
    LEFT JOIN (
        SELECT ul.IDCertificates, ul.IDUnderlyings,
               ul.Px_close,
               ROW_NUMBER() OVER (
                   PARTITION BY ul.IDCertificates, ul.IDUnderlyings
                   ORDER BY ul.Px_date DESC
               ) AS rn
        FROM [dbo].[UL_PriceHistory] ul           -- <<< adatta nome tabella
    ) last_px
        ON last_px.IDCertificates = u.IDCertificates
       AND last_px.IDUnderlyings  = u.IDUnderlyings
       AND last_px.rn = 1
    WHERE u.IDCertificates = @IDCertificates
    ORDER BY u.IsWorstOf DESC;   -- worst-of prima

END
GO
