USE hahn;
PRAGMA OrderedColumns;
PRAGMA AnsiInForEmptyOrNullableItemsCollections;
PRAGMA Yson.DisableStrict;


$datetime_parse_alt = DateTime::Parse("%Y-%m-%d %H:%M:%S");
$datetime_parse = DateTime::Parse("%Y-%m-%dT%H:%M:%S");
$date_parse = DateTime::Parse("%Y-%m-%dT");
$datetime_format_alt = DateTime::Format("%Y-%m-%d %H:%M:%S");
$datetime_format = DateTime::Format("%Y-%m-%dT%H:%M:%S");


$DT_START = '2021-11-15';


$SESSIONS = '//home/taxi-dwh/cdm/demand/user_appsession';


$orders_with_postcard = 'home/taxi-delivery/analytics/dev/product/postcard/orders_with_postcard_flg';


$fct_order = '//home/taxi-dwh/cdm/marketplace/fct_order';


$events_with_postcard_appmetrica = (
    SELECT appmetrica.event_name as event_name
        ,   cast(DateTime::MakeDate($datetime_parse_alt(utc_event_dttm)) as String) as event_date
        ,   appmetrica_device_id
        ,   case when event_name like '%Postcard.Options.IconClicked%'
                        or event_name like '%Postcard.Options.FieldClicked%'
                        or event_name like '%Postcard.Summary.FieldClicked%'
                        or event_name like '%Postcard.Summary.IconClicked%'
                    then 'Попытка создать открытку'
                --
                when event_name like '%Postcard.RecipientTracking.PostcardSeenFirstTime%'
                    then 'Получатель впервые увидел открытку'
                --
                when event_name like 'Postcard.Tracking.PostcardOpened'
                    then 'Инициатор/получатель открыл открытку'
                --
                when event_name like '%Postcard.Tracking.PostcardImageLoadingError%'
                    then 'Открытка не загрузилась с бэкенда'
                -- 
                when event_name like '%Postcard.Tracking.PostcardImageLoadedAndShown%'
                    then 'Открытка успешно загрузилась'
                else event_name
            end as event_name_full_row
        ,   case when event_name like '%Postcard.Options.IconClicked%'
                        or event_name like '%Postcard.Options.FieldClicked%'
                        or event_name like '%Postcard.Summary.FieldClicked%'
                        or event_name like '%Postcard.Summary.IconClicked%'
                    then 'Попытка создать открытку'
                --
                when event_name like '%Postcard.RecipientTracking.PostcardSeenFirstTime%'
                    then 'Получатель впервые увидел открытку'
                --
                when event_name like 'Postcard.Tracking.PostcardOpened' and ListHas(Yson::ConvertToStringList(event_value.deliverymetrics.meta.roles), 'recipient')
                    then 'Получатель открыл открытку'
                --
                when event_name like 'Postcard.Tracking.PostcardOpened' and ListHas(Yson::ConvertToStringList(event_value.deliverymetrics.meta.roles), 'initiator')
                    then 'Инициатор открыл открытку'
                --
                when event_name like 'Postcard.Tracking.MessageSeen' and ListHas(Yson::ConvertToStringList(event_value.deliverymetrics.meta.roles), 'recipient')
                    then 'Получатель увидел на трекинге поле с открыткой'
                --
                when event_name like 'Postcard.Tracking.MessageSeen' and ListHas(Yson::ConvertToStringList(event_value.deliverymetrics.meta.roles), 'initiator')
                    then 'Инициатор увидел на трекинге поле с открыткой'
                --
                when event_name like 'Postcard.Tracking.MessageClicked' and ListHas(Yson::ConvertToStringList(event_value.deliverymetrics.meta.roles), 'recipient')
                    then 'Получатель нажал на поле с открыткой на трекинге'
                --
                when event_name like 'Postcard.Tracking.MessageClicked' and ListHas(Yson::ConvertToStringList(event_value.deliverymetrics.meta.roles), 'initiator')
                    then 'Инициатор нажал на поле с открыткой на трекинге'
                --
                when event_name like 'Postcard.Tracking.PostcardClosed' and ListHas(Yson::ConvertToStringList(event_value.deliverymetrics.meta.roles), 'recipient')
                    then 'Получатель нажал на крестик и закрыл открытку'
                --
                when event_name like 'Postcard.Tracking.PostcardClosed' and ListHas(Yson::ConvertToStringList(event_value.deliverymetrics.meta.roles), 'initiator')
                    then 'Инициатор нажал на крестик и закрыл открытку'
                --
                when event_name like '%Postcard.Tracking.PostcardImageLoadingError%'
                    then 'Открытка не загрузилась с бэкенда'
                -- 
                when event_name like '%Postcard.Tracking.PostcardImageLoadedAndShown%'
                    then 'Открытка успешно загрузилась'
                else event_name
            end as event_name_full
        ,   appmetrica.user_id as user_id
        ,   appmetrica.app_platform as app_platform
        ,   event_id
        ,   coalesce(Yson::ConvertToString(event_value.deliverymetrics.meta.tariff_class), 'no tariff') as tariff_class
        ,   case when ListLength(Yson::ConvertToStringList(event_value.deliverymetrics.meta.roles)) > 0
                    then ListConcat(Yson::ConvertToStringList(event_value.deliverymetrics.meta.roles))
                    else 'no role'
                end as role
        ,   user_group
        ,   null as success_order_flg
        ,   null as rating_value
        ,   null as rating_comment
    from range('//home/taxi-dwh/ods/appmetrica/taxi', '2021-11') as appmetrica
        left join `//home/taxi-delivery/analytics/dev/product/postcard/user_id_segm` as user_segm
            on appmetrica.user_id = user_segm.user_id
    where true
        and utc_event_dttm >= '2021-11-27'
        and event_name like '%Postcard%'
);


$orders_with_postcard_flg_appmetrica = (
    SELECT 'Открытка отправлена' as event_name
        ,    utc_order_created_dt as event_date
        ,   '111111' as appmetrica_device_id
        ,   'Открытка отправлена' as event_name_full_row
        ,   'Открытка отправлена' as event_name_full
        ,   user_id as user_id
        ,   app_platform_name as app_platform 
        ,   order_id as event_id
        ,   tariff_class_code as tariff_class
        ,   'initiator' as role
        ,   user_group
        ,   success_order_flg
        ,   rating_value
        ,   rating_comment
    from `home/taxi-delivery/analytics/dev/product/postcard/orders_with_postcard_flg`
    where true
        and not mqc_order_flg
        and not fake_order_flg
)
;
insert into `//home/taxi-delivery/analytics/dev/product/postcard/events_with_postcard_flg_appmetrica_full` with truncate
    select *
    from $events_with_postcard_appmetrica
        union all
    SELECT *
    from  $orders_with_postcard_flg_appmetrica
;
