<?php

use Phalcon\Mvc\Model\Migration;

class JagaDataChallengeMigration_362 extends Migration
{
    public function up()
    {
        $this->down();

        self::$connection->execute("
            INSERT INTO jaga.produk (id_index, nama, icon, is_active, sort_order, is_show) VALUES ('18', 'Jaga Data Challenge', 'http://a.a.com', 't', '18', '1');
            SELECT setval(pg_get_serial_sequence('produk', 'id_index'), coalesce(max(id_index),0) + 1, false) FROM jaga.produk;
            
            INSERT INTO jaga.kategori_diskusi (title, produk_id) VALUES ('JAGA DATA CHALLENGE', '18');
        ");

        self::$connection->execute("
            DROP VIEW IF EXISTS jaga.view_trending_berita;
            CREATE OR REPLACE VIEW jaga.view_trending_berita AS
            SELECT d.id,
            d.title,
            d.content,
            d.uuid,
            d.created_at,
            d.updated_at,
            d.release_date,
            d.user_id,
            u.is_banned,
            u.um_user_name AS nama,
            u.uuid_user,
            u.jenis_kelamin,
            p.id_index AS id_produk,
            p.nama AS nama_produk,
            d.is_deleted,
            d.type,
            u.foto,
            d.is_anonymous,
            COALESCE(dc.comment_count, 0::bigint) AS total_comment,
            COALESCE(dl.like_count, 0::bigint) AS total_like,
            COALESCE(ds.share_count, 0::bigint) AS total_share,
            COALESCE(COALESCE(dc.comment_count, 0::bigint) + COALESCE(dl.like_count, 0::bigint) + COALESCE(ds.share_count, 0::bigint), 0::bigint) AS hotness
           FROM jaga.diskusi d
             JOIN jaga.um_user u ON d.user_id = u.um_id
             JOIN jaga.kategori_diskusi kd ON d.kategori_diskusi_id = kd.id
             JOIN jaga.produk p ON p.id_index = kd.produk_id
             LEFT JOIN ( SELECT diskusi_comment.diskusi_id,
                    count(diskusi_comment.diskusi_id) AS comment_count
                   FROM jaga.diskusi_comment
                  WHERE diskusi_comment.created_at > (now() - '8 days'::interval) AND diskusi_comment.created_at <= (now()::date + '00:00:01'::interval)
                  GROUP BY diskusi_comment.diskusi_id) dc ON d.id = dc.diskusi_id
             LEFT JOIN ( SELECT diskusi_like.diskusi_id,
                    count(diskusi_like.diskusi_id) AS like_count
                   FROM jaga.diskusi_like
                  WHERE diskusi_like.created_at > (now() - '8 days'::interval) AND diskusi_like.created_at <= (now()::date + '00:00:01'::interval)
                  GROUP BY diskusi_like.diskusi_id) dl ON d.id = dl.diskusi_id
             LEFT JOIN ( SELECT diskusi_share.diskusi_id,
                    count(diskusi_share.diskusi_id) AS share_count
                   FROM jaga.diskusi_share
                  WHERE diskusi_share.created_at > (now() - '8 days'::interval) AND diskusi_share.created_at <= (now()::date + '00:00:01'::interval)
                  GROUP BY diskusi_share.diskusi_id) ds ON d.id = ds.diskusi_id
          WHERE d.type = 1 AND d.is_deleted = 0
          ORDER BY (COALESCE(COALESCE(dc.comment_count, 0::bigint) + COALESCE(dl.like_count, 0::bigint) + COALESCE(ds.share_count, 0::bigint), 0::bigint)) DESC            
          ;
        ");
    }

    public function down()
    {
        self::$connection->execute("
            DELETE FROM jaga.kategori_diskusi WHERE produk_id = 18;
            SELECT setval(pg_get_serial_sequence('kategori_diskusi', 'id'), coalesce(max(id),0) + 1, false) FROM jaga.kategori_diskusi;
            DELETE FROM jaga.produk WHERE id_index = 18;
            SELECT setval(pg_get_serial_sequence('produk', 'id_index'), coalesce(max(id_index),0) + 1, false) FROM jaga.produk;
        ");

        self::$connection->execute("
            DROP VIEW IF EXISTS jaga.view_trending_berita;
        ");
    }
}
