<?php

use Phalcon\Validation;
use Phalcon\Validation\Validator\Email as EmailValidator;

class DiskusiLapor extends \Phalcon\Mvc\Model
{
    const STATUS_INIT = 0;
    const STATUS_DISETUJUI = 1;
    const STATUS_DITOLAK = 2;
    const STATUS_DITINDAKLANJUTI = 3;
    const TYPE_DISKUSI = 100;
    const TYPE_KOMENTAR = 101;

    public function initialize()
    {
        $this->setSchema("jaga");
        $this->setSource("diskusi_lapor");
        $this->hasOne('id_user', 'UmUser', 'um_id');
        $this->hasOne('id_user_terlapor', 'UmUser', 'um_id', ['alias' => 'terlapor']);
        $this->hasOne('updated_by', 'UmUser', 'um_id', ['alias' => 'updatedBy']);
        $this->hasOne('id_diskusi', 'Diskusi', 'id');
        $this->hasOne('id_komentar', 'DiskusiComment', 'id');
        $this->hasOne('id_kategori', 'DiskusiLaporKategori', 'id');
        $this->hasOne('id_kategori', 'UserLaporKategori', 'id', ['alias' => 'kategori']);
    }

    public function toArray($columns = null)
    {
        $result = parent::toArray(['id', 'isi', 'created_at', 'lainnya']);

        $result['user'] = $this->umUser->toArray(['um_id', 'um_user_name', 'nama', 'foto']);
        $result['user_terlapor'] = $this->terlapor;
        if ($this->id_user_terlapor != null) {
            $result['kategori'] = $this->kategori;
        } else {
            $result['kategori'] = $this->diskusiLaporKategori;
        }
        $result['diskusi'] = $this->diskusi;
        $result['komentar'] = $this->diskusiComment;
        $result['status'] = $this->getStatusLabel();
        if (!empty($this->updated_by && !empty($this->updatedBy))) {
            $result['updated_by'] = $this->updatedBy->toArray(['um_id', 'um_user_name', 'nama', 'foto']);
        }

        return $result;
    }

    public function simpletoArray()
    {
        $result = parent::toArray(['id', 'isi', 'created_at', "lainnya"]);
        $result['status'] = $this->getStatusLabel();
        // $result['kategori'] = $this->diskusiLaporKategori;
        if ($this->id_user_terlapor != null) {
            $result['kategori'] = $this->kategori;
        } else {
            $result['kategori'] = $this->diskusiLaporKategori;
        }

        return $result;
    }

    public function getStatusLabel()
    {
        if ($this->status == self::STATUS_DISETUJUI) {
            return 'Disetujui';
        } else if ($this->status == self::STATUS_INIT) {
            return 'Belum ditindaklanjuti';
        } else if ($this->status == self::STATUS_DITOLAK) {
            return 'Ditolak';
        } else if ($this->status == self::STATUS_DITINDAKLANJUTI) {
            return 'Sudah ditindaklanjuti';
        }

        return '-';
    }

    public function getStatusLabelEn()
    {
        if ($this->status == self::STATUS_DISETUJUI) {
            return 'Approved';
        } else if ($this->status == self::STATUS_INIT) {
            return 'Postponed';
        } else if ($this->status == self::STATUS_DITOLAK) {
            return 'Denied';
        } else if ($this->status == self::STATUS_DITINDAKLANJUTI) {
            return 'Processed';
        }

        return '-';
    }

    public function getAdminNotificationMessage()
    {
        $isDiskusiReport = empty($this->id_komentar);
        $komentar = $this->diskusiComment;
        $diskusi = $this->diskusi;
        $message = "";

        if ($isDiskusiReport) {
            $reportedUsername = $diskusi->umUser->um_user_name;
            $message = "Melaporkan diskusi $reportedUsername dengan judul $diskusi->title";
        } else {
            $reportedUsername = $komentar->umUser->um_user_name;
            $message = "Melaporkan komentar $reportedUsername pada diskusi berjudul $diskusi->title";
        }

        return $message;
    }

    public function getAdminNotificationMessageEnglish()
    {
        $isDiskusiReport = empty($this->id_komentar);
        $komentar = $this->diskusiComment;
        $diskusi = $this->diskusi;
        $message = "";

        if ($isDiskusiReport) {
            $reportedUsername = $diskusi->umUser->um_user_name;
            $message = "reported discussion $reportedUsername titled: $diskusi->title";
        } else {
            $reportedUsername = $komentar->umUser->um_user_name;
            $message = "reported comment $reportedUsername in discussion titled: $diskusi->title";
        }

        return $message;
    }

    public function getOwnerNotificationMessage()
    {
        $isDiskusiReport = empty($this->id_komentar);
        $komentar = $this->diskusiComment;
        $diskusi = $this->diskusi;
        $message = "";
        $adminAction = strtolower($this->getStatusLabel());

        if ($isDiskusiReport) {
            $reportedUsername = $diskusi->umUser->um_user_name;

            $message = "Laporan terhadap diskusi anda berjudul $diskusi->title telah $adminAction oleh admin";
        } else {
            $reportedUsername = $komentar->umUser->um_user_name;

            $message = "Laporan terhadap komentar anda pada diskusi berjudul $diskusi->title telah $adminAction oleh admin";
        }

        return $message;
    }

    public function getOwnerNotificationMessageEnglish()
    {
        $isDiskusiReport = empty($this->id_komentar);
        $komentar = $this->diskusiComment;
        $diskusi = $this->diskusi;
        $message = "";
        $adminAction = strtolower($this->getStatusLabelEn());

        if ($isDiskusiReport) {
            $reportedUsername = $diskusi->umUser->um_user_name;

            $message = "Report on your discussion titled: $diskusi->title had been $adminAction by Admin";
        } else {
            $reportedUsername = $komentar->umUser->um_user_name;

            $message = "Report on your comment in discussion titled: $diskusi->title had been $adminAction by Admin";
        }

        return $message;
    }
	
	public function getAllAdminNotificationMessage($adminName)
    {
        $isDiskusiReport = empty($this->id_komentar);
        $komentar = $this->diskusiComment;
        $diskusi = $this->diskusi;
        $message = "";
        $adminAction = strtolower($this->getStatusLabel());

        if ($isDiskusiReport) {            
            $message = "Laporan terhadap diskusi berjudul $diskusi->title telah $adminAction oleh $adminName";
        } else {            
            $message = "Laporan terhadap komentar pada diskusi berjudul $diskusi->title telah $adminAction oleh $adminName";
        }

        return $message;
    }

	public function getAllAdminNotificationMessageEnglish($adminName)
    {
        $isDiskusiReport = empty($this->id_komentar);
        $komentar = $this->diskusiComment;
        $diskusi = $this->diskusi;
        $message = "";
        $adminAction = strtolower($this->getStatusLabelEn());

        if ($isDiskusiReport) {
            $message = "Report on discussion titled $diskusi->title has been $adminAction by $adminName";
        } else {
            $message = "Report on comment in discussion titled $diskusi->title has been $adminAction by $adminName";
        }

        return $message;
    }
	
	public function getAllAdminNotificationMessageForUser($adminName)
    {
        $isDiskusiReport = empty($this->id_komentar);
        $komentar = $this->diskusiComment;
        $diskusi = $this->diskusi;
        $message = "";
        $adminAction = strtolower($this->getStatusLabel());

        if ($isDiskusiReport) {     
			$reportedUsername = $this->terlapor->um_user_name;
            $message = "Laporan terhadap user $reportedUsername pada diskusi berjudul $diskusi->title telah $adminAction oleh $adminName";
        } else {            
			$reportedUsername = $this->terlapor->um_user_name;
            $message = "Laporan terhadap user $reportedUsername pada komentar pada diskusi berjudul $diskusi->title telah $adminAction oleh $adminName";
        }

        return $message;
    }

	public function getAllAdminNotificationMessageForUserEnglish($adminName)
    {
        $isDiskusiReport = empty($this->id_komentar);
        $komentar = $this->diskusiComment;
        $diskusi = $this->diskusi;
        $message = "";
        $adminAction = strtolower($this->getStatusLabelEn());

        if ($isDiskusiReport) {
			$reportedUsername = $this->terlapor->um_user_name;
            $message = "Report on user $reportedUsername in your discussion titled $diskusi->title had been $adminAction by $adminName";
        } else {
			$reportedUsername = $this->terlapor->um_user_name;
            $message = "Report on user $reportedUsername in comment from discussion titled $diskusi->title had been $adminAction by $adminName";
        }

        return $message;
    }

    public function getAdminNotificationMessageForUser()
    {
        $isDiskusiReport = empty($this->id_komentar);
        $komentar = $this->diskusiComment;
        $diskusi = $this->diskusi;
        $message = "";

        if ($isDiskusiReport) {
            $reportedUsername = $diskusi->umUser->um_user_name;
            $message = "Melaporkan user $reportedUsername pada diskusi dengan judul $diskusi->title";
        } else {
            $reportedUsername = $komentar->umUser->um_user_name;
            $message = "Melaporkan user $reportedUsername pada komentar dengan diskusi berjudul $diskusi->title";
        }

        return $message;
    }

    public function getAdminNotificationMessageForUserEnglish()
    {
        $isDiskusiReport = empty($this->id_komentar);
        $komentar = $this->diskusiComment;
        $diskusi = $this->diskusi;
        $message = "";

        if ($isDiskusiReport) {
            $reportedUsername = $diskusi->umUser->um_user_name;
            $message = "reported user $reportedUsername in discussion titled $diskusi->title";
        } else {
            $reportedUsername = $komentar->umUser->um_user_name;
            $message = "reported user $reportedUsername in comment from discussion titled $diskusi->title";
        }

        return $message;
    }

    public function getOwnerNotificationMessageForUser()
    {
        $isDiskusiReport = empty($this->id_komentar);
        $komentar = $this->diskusiComment;
        $diskusi = $this->diskusi;
        $message = "";
        $adminAction = strtolower($this->getStatusLabel());

        if ($isDiskusiReport) {
            $reportedUsername = $diskusi->umUser->um_user_name;

            $message = "Laporan terhadap user $reportedUsername pada diskusi anda berjudul $diskusi->title telah $adminAction oleh admin";
        } else {
            $reportedUsername = $komentar->umUser->um_user_name;

            $message = "Laporan terhadap user $reportedUsername pada komentar diskusi berjudul $diskusi->title telah $adminAction oleh admin";
        }

        return $message;
    }

    public function getOwnerNotificationMessageForUserEnglish()
    {
        $isDiskusiReport = empty($this->id_komentar);
        $komentar = $this->diskusiComment;
        $diskusi = $this->diskusi;
        $message = "";
        $adminAction = strtolower($this->getStatusLabelEn());

        if ($isDiskusiReport) {
            $reportedUsername = $diskusi->umUser->um_user_name;
            $message = "Report on user $reportedUsername in discussion titled $diskusi->title had been $adminAction by Admin";
        } else {
            $reportedUsername = $komentar->umUser->um_user_name;

            $message = "Report on user $reportedUsername in comment from discussion titled $diskusi->title had been $adminAction by Admin";
        }

        return $message;
    }

    public function getReportedUserId()
    {
        $isDiskusiReport = empty($this->id_komentar);

        // if ($isDiskusiReport) {
        //     return $this->diskusi->user_id;
        // } else {
        //     return $this->diskusiComment->user_id;
        // }

        return $this->id_user;
    }

    public function getReportedObjectLink()
    {
        $uuid = $this->diskusi->uuid;
        return "diskusi/detail?uuid=$uuid";
    }

    public static function isValidStatus($status)
    {
        return $status >= self::STATUS_INIT && $status <= self::STATUS_DITINDAKLANJUTI;
    }
}
