/**
 * This will return the material demand per day
 * startdate and end date should be passed over
 */
export const materialPerDay = `
use [test1_AlplaPROD2.0_Read]

DECLARE @ShiftStartHour INT = 6
declare @startDate nvarchar(max) = '[startDate]'
declare @endDate nvarchar(max) = '[endDate]'
;with Calendar as (
    select cast(@startDate as date) CalDate
    union all
    select dateadd(day,1,CalDate)
    from Calendar
    where CalDate < @endDate
),
DailySplit AS (
    SELECT
        -- Lot fields
        l.Id                                AS ProductionLotId,
        l.ProductionLotHumanReadableId,
        l.ArticleHumanReadableId,
        l.ArticleDescription,
        l.LocationId,
        l.MachineHumanReadableId,
        l.MachineDescription,
        l.StartDate,
        l.FinishDate,
        l.ProductionCustomerDescription,
        l.ProductionCustomerHumanReadableId,
        l.PlannedQuantity,
        l.PlannedLoadingUnit,
        l.Cavity,
        l.Utilisation,
        l.TotalMaterialDemand               AS LotTotalMaterialDemand,

        -- Material fields
        m.MaterialHumanReadableId,
        m.MaterialDescription,
        m.TotalDemand                       AS LotMaterialTotalDemand,
        c.CalDate,

        DATEDIFF(SECOND,l.StartDate,l.FinishDate) AS LotDurationSec,

        -- build  shift‑based 24‑hour window  (e.g. 06:00 → next day 06:00)
        CASE 
            WHEN l.StartDate > DATEADD(HOUR,@ShiftStartHour,CAST(c.CalDate AS DATETIME2(7)))
                 THEN l.StartDate 
                 ELSE DATEADD(HOUR,@ShiftStartHour,CAST(c.CalDate AS DATETIME2(7)))
        END AS DayStart,

        CASE 
            WHEN l.FinishDate < DATEADD(SECOND,-0.0000001,
                           DATEADD(HOUR,@ShiftStartHour,
                                   DATEADD(DAY,1,CAST(c.CalDate AS DATETIME2(7)))))
                 THEN l.FinishDate
                 ELSE DATEADD(SECOND,-0.0000001,
                           DATEADD(HOUR,@ShiftStartHour,
                                   DATEADD(DAY,1,CAST(c.CalDate AS DATETIME2(7)))))
        END AS DayEnd
    FROM [issueMaterial].[ProductionLot] (nolock) AS l
    LEFT JOIN [issueMaterial].[MaterialDemand] (nolock) AS m
        ON m.ProductionLotId = l.Id
    CROSS JOIN Calendar AS c
    WHERE DATEADD(HOUR,@ShiftStartHour,CAST(c.CalDate AS DATETIME2))
              < l.FinishDate
      AND DATEADD(HOUR,@ShiftStartHour+24,CAST(c.CalDate AS DATETIME2))
              > l.StartDate
	--and l.[ProductionLotHumanReadableId] = 26364
),
Fraction AS (
    SELECT
        ds.*,
        DATEDIFF(SECOND,ds.DayStart,ds.DayEnd) AS OverlapSec
    FROM DailySplit ds
),
Normalized AS (
    SELECT
        f.*,
        f.OverlapSec * 1.0 /
            NULLIF(SUM(f.OverlapSec) OVER
                   (PARTITION BY f.ProductionLotId, f.MaterialHumanReadableId),0)
            AS NormalizedFraction
    FROM Fraction f
)
SELECT
    n.ProductionLotId,
    n.ProductionLotHumanReadableId,
    n.ArticleHumanReadableId,
    n.ArticleDescription,
    n.LocationId,
    n.MachineHumanReadableId,
    n.MachineDescription,
    n.StartDate,
    n.FinishDate,
    n.ProductionCustomerDescription,
    n.ProductionCustomerHumanReadableId,
    n.PlannedQuantity,
    n.PlannedLoadingUnit,
    n.Cavity,
    n.Utilisation,
    n.LotTotalMaterialDemand,
    n.MaterialHumanReadableId,
    n.MaterialDescription,
    n.LotMaterialTotalDemand,
    n.CalDate,
    n.NormalizedFraction * n.LotMaterialTotalDemand AS DailyMaterialDemand
FROM Normalized n
ORDER BY
    n.MaterialHumanReadableId,
    n.CalDate,
    n.ProductionLotHumanReadableId
OPTION (MAXRECURSION 0);
`;

export const materialPurchasesPerDay = `
use AlplaPROD_test1
declare @startDate nvarchar(max) = '[startDate]'
declare @endDate nvarchar(max) = '[endDate]'
SELECT 
      [IdBestellung] as purhcaseOrder
     
      ,[IdArtikelVarianten] as MaterialHumanReadableId
      ,convert(date, [BestellDatum], 120) as orderDate
      ,convert(date, [Lieferdatum], 120) as deliveryDate
      ,[BestellMenge] as qty
      ,[BestellMengeVPK] as pallets
     
  FROM [dbo].[T_Bestellpositionen]

  where  PositionsStatus = 2 and convert(date, [Lieferdatum], 120) between @startDate and @endDate --and IdBestellung in( 5535,5534,5513) 
`;
