<?php

namespace frontend\controllers;

use common\models\bbapi\UtcObject;
use common\models\bbapi\UtcReportObject;
use common\models\CTMailChimp;
use common\models\MailSender;
use common\models\opportunities\OpportunitiesModel;
use common\models\opportunities\OpportunityFeedbackModel;
use common\models\Options;
use common\models\rocket_chat\RocketChat;
use common\models\rocket_chat\RocketChatCT;
use common\models\rocket_chat\RocketChatGroups;
use common\models\rocket_chat\RocketChatHttpClient;
use common\models\rocket_chat\RocketChatUsers;
use common\models\team\Team;
use common\models\User;
use common\models\UserApiData;
use common\models\UserExportData;
use common\models\UserManagementData;
use common\models\UserManagementDataRules;
use common\models\UserNotifications;
use common\models\UserProfile;
use common\models\UserRemover;
use frontend\models\SignupExtraForm;
use frontend\models\SignupForm;
use Yii;
use yii\filters\AccessControl;
use yii\helpers\Url;
use yii\web\Controller;
use common\models\FeedbackFeed;


/**
 * Description of ProfileController
 */
class ProfileController extends Controller 
{
    public $layout = 'ct-main-layout';

    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'actions' => ['test', 'index', 'report', 'feedback', 'feedback-full-utc', 'my-team', 'full-utc-report', 'full-utc-report-pdf','data-management-settings'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
	                [
                        'actions' => ['ajax-send-messages', 'ajax-active-sharing-platform', 'ajax-send-opportunity-feedback', 'update-base-profile'],
                        'allow' => true,
                        'verbs' => ['POST'],
                        'roles' => ['@'],
                    ],
                ],
            ],
        ];
    }

	/**
	 * Main page controller
	 * @return string|\yii\web\Response
	 */
    public function actionIndex()
    {
	    $user_id = Yii::$app->user->id;
	    $user = User::find()->where(['id' =>$user_id])->one();

	    /** Oportunities platform data  */
	    $talents = PlatformDataController::getTalents();

		if (!Yii::$app->user->can('profile_view')){
			$model = $user;
			return $this->render('basic-profile', compact('model', 'user', 'talents'));
		}

        $profile = UserProfile::find()->where(['user_id' =>$user_id])->one();

	    if(Yii::$app->request->get('action') === 'active_sharing_platform' && Yii::$app->user->can(User::ROLE_USER2)){
			self::activateSharingPlatform($user);
	    }


        $model = SignupExtraForm::findOne(['user_id'=>\Yii::$app->user->id]);

        /** UTC data water earth air fire */

        
        $utcdata = UserApiData::findOne(['user_id' => $user_id]);
        if($utcdata){
            $utcdata = UtcObject::initFromJSON(ApiController::getUTCData($utcdata->utc_id));
        }

        /** token for basic utc url */
        $basic_utc_token = ApiController::getStartUtcSurveyToken(2, 'EN', $user->internal_user_id, 'external_'.$user_id);
        $base_utc_url = ApiController::checkResource('http://services.connectingtalents.org/utc_survey')?'http://services.connectingtalents.org/utc_survey?token='.urlencode($basic_utc_token):Url::to(['site/bb-server-error']);
	    $full_utc_token = ApiController::getStartUtcSurveyToken(2, 'EN', $user->internal_user_id, 'external_'.$user_id, ['api/response-full-utc']);
        $pass_skill_url = 'http://services.connectingtalents.org/passionsandskills?token='.urlencode($full_utc_token);

        if(Yii::$app->user->can(User::ROLE_USER3)){
        	if(isset($_GET['shp_opport_id'])){
		        $showcase_opportunity_single = OpportunitiesModel::findOne($_GET['shp_opport_id']);
	            $showcase_opportunity_team_member = $showcase_opportunity_single->team?$showcase_opportunity_single->team->getTeamListForUser($user->id):[];
	        }else{
		        $showcase_opportunity = OpportunitiesModel::find()->limit(9)->all();//$user->myOpportunities;
	        }
        }

        return $this->render('index',
            compact(
                'user',
                'profile',
                'base_utc_url',
                'utcdata',
                'model',
                'talents',
                'showcase_opportunity_single',
                'showcase_opportunity_team_member',
                'showcase_opportunity',
                'pass_skill_url'
            )
        );
    }

	/**
	 * Report controller
	 * @return string|\yii\web\Response
	 */
    public function actionReport(){
        if (!\Yii::$app->user->can('profile_view')) return $this->redirect(['/']);
        $user_id = Yii::$app->user->id;
        $utcdata = UserApiData::findOne(['user_id' => $user_id]);
        if($utcdata){
            $utcdata = json_decode(ApiController::getUTCData($utcdata->utc_id));
        }
        
        return $this->render('report',compact('utcdata'));
    }

	/**
	 * Feedback page
	 * @return string
	 */
    public function actionFeedback()
    {
        $this->layout = 'ct-main-layout';
        
        $model = new \common\models\FeedbackFeed();
        if ($model->load(Yii::$app->request->post())) {
        if ($model->validate()) {
            $model->save();
            $model->clear();
            Yii::$app->session->setFlash('feedback_ok', 'Thank you for your feedback.');
        } else {
            Yii::$app->session->setFlash('feedback_error', 'Sorry, feedback is failed.');
        }
        }
        return $this->render('feedback', compact('model'));
        
    }

	/**
	 * Feedback full utc page
	 * @return string
	 */
    public function actionFeedbackFullUtc()
    {
        $this->layout = 'ct-main-layout';

        $model = new \common\models\FeedbackFeed();
        if ($model->load(Yii::$app->request->post())) {
	        if ($model->validate()) {
	            $model->save();
	            $model->clear();
	            Yii::$app->session->setFlash('feedback_ok', 'Thank you for your feedback.');
	        } else {
	            Yii::$app->session->setFlash('feedback_error', 'Sorry, feedback is failed.');
	        }
        }
        return $this->render('feedback-full-utc', compact('model'));

    }

	/**
	 * My team page controller
	 *
	 * @param $id
	 *
	 * @return string
	 */
    public function actionMyTeam($id){
	    $this->layout = 'ct-main-layout';
	    $user = User::findOne(Yii::$app->user->id);
	    $current_team = Team::findOne($id);

	    /** check user permission */
	    $check_permission = Team::checkUserInTeam($id, $user->id) && \Yii::$app->user->can(User::ROLE_USER3);

	    if(!$check_permission) $this->redirect(['profile/index']);

	    $team_users_js = [];
	    /** @var User $item */
	    if($current_team->owner_id == $user->id){
		    $team_users = $current_team->users;
		    foreach ($team_users as $item){
			    $team_users_js[] = $item->email;
		    }
		    $potential_team_members = $current_team->teamUser;
	    }else{
		    $potential_team_members = $current_team->getTeamListForUser($user->id);
	    }

	    $team_users_js = json_encode($team_users_js);



	    return $this->render('my-team', compact('user', 'current_team', 'team_users_js', 'potential_team_members'));
    }

	/**
	 * Portfolio deepdive massage
	 * @return bool
	 */
    public function actionAjaxSendMessages(){
    	$request = Yii::$app->request;
    	if($request->isAjax && $request->isPost){
			$type = $request->post('type');
			$user_id = $request->post('user_id');
			$user = User::findOne($user_id);
			if($user) {
				if ( $type === 'coaching' || $type === 'assessment' ) {

//					$template = $type === 'coaching'? 'deepdive-coaching' : 'deepdive-assesment';

					/**
					 * TODO @event_mail Deepdive coaching & assesment event name - send message via mandrill
					 */
					/*$res = Yii::$app->mailer->compose($template,[
						'USERNAME' => $user->username,
						'EMAIL' => $user->email,
					])
                    ->setFrom([Yii::$app->params['adminEmail']=>Yii::$app->params['adminEmail']])
                    ->setTo( Yii::$app->params['deepdiveEmail'] )
                    ->send();*/

					$res = MailSender::sendToAdmin_Deepdive($user, $type);

					return json_encode( [
						'status'  => 'OK',
						'context' => $res,
						'email' => Yii::$app->params['deepdiveEmail']
					] );
				}
			}
	    }
	    return json_encode( [
		    'status'  => 'ERROR',
		    'context' => $request
	    ] );
    }

	/**
	 * Active sharing platform action
	 * @return string
	 */
    public function actionAjaxActiveSharingPlatform(){
	    $request = Yii::$app->request;
	    if($request->isAjax && $request->isPost){

	    	$user_id = $request->post('user_id');
		    $user = User::findOne($user_id);

		    if($user){
				if($user->checkSharingPlatformPaying()){
					$user->myprofile->sharing = 1;
					$user->role = User::ROLE_USER3; //Sharing user role
					$user->save();
					$res = $user->myprofile->save();

					return json_encode( [
						'status'  => 'OK',
						'context' => $res
					] );
				}
		    }
	    }
	    return json_encode( [
		    'status'  => 'ERROR',
		    'context' => $request
	    ] );
    }

	/**
	 * @return string
	 */
    public function actionAjaxSendOpportunityFeedback(){
	    $request = Yii::$app->request;
	    if($request->isAjax && $request->isPost){

		    $from_user_id = $request->post('from_user_id');
		    $to_user_id = $request->post('to_user_id');
		    $opportunity_id = $request->post('opportunity_id');
			$feedback = $request->post('feedback');

		    if($from_user_id && $to_user_id && $opportunity_id && $feedback){
				$opp_feed = new OpportunityFeedbackModel();
				$opp_feed->opportunity_id = $opportunity_id;
				$opp_feed->from_user_id = $from_user_id;
				$opp_feed->to_user_id = $to_user_id;
				$opp_feed->setData($feedback);
				$res = $opp_feed->save();

			    /**
			     *   TODO @event_notification user receive feedback from a team user
			     */
			    $opportunity = OpportunitiesModel::findOne($opportunity_id);
			    if($opportunity){
				    $text = "A user received a feedback from a Team Member ".$opportunity->title;
		            UserNotifications::setNotification($to_user_id, UserNotifications::TYPE_TEAM_USER_LEAVE_FEEDBACK, '', $text, Url::to(['profile/my-team/'.$opportunity->team->id]));
			    }


				if($res){
					return json_encode( [
						'status'  => 'OK'
					] );
				}else{
					return json_encode( [
						'status'  => 'ERROR',
						'context' => $res
					] );
				}

		    }
	    }
	    return json_encode( [
		    'status'  => 'ERROR',
		    'context' => $request
	    ] );
    }


    public static function activateSharingPlatform(User $user){
	    if($user){
		    if($user->checkSharingPlatformPaying()){
			    $user->myprofile->sharing = 1;
			    $user->role = User::ROLE_USER3; //Sharing user role
			    $user->save();
			    $res = $user->myprofile->save();

				return $res;
		    }
	    }

	    return false;
    }


    public function actionUpdateBaseProfile($id){

    	if(!\Yii::$app->user->id || !$id){
		    return $this->redirect(['/']);
	    }

	    $model = User::findOne(Yii::$app->user->id);

    	if($model){
		    if ($model->load(Yii::$app->request->post())) {
			    if($model->validate()){
				    $model->update();
				    return $this->redirect(['/profile']);
			    }
		    }
	    }

	    return $this->redirect(['/profile']);
    }

	/**
	 * Full UTC report action
	 * @return string
	 */
    public function actionFullUtcReport(){
    	$this->layout = 'ct-report-layout';

	    $form_fields = [
		    'cover-t-1',
		    'cover-t-2',
		    'cover-t-3',
		    'cover-t-4',
		    'cover-t-5',
		    'cover-b-1',
		    'cover-b-2',
		    'cover-b-3',


		    'intro-b-1',
		    'intro-b-2',
		    'intro-b-3',
		    'intro-t-3',
		    'intro-b-4',
		    'intro-b-5',
		    'intro-t-1',
		    'intro-t-2',

		    'driver-b-1',
		    'driver-b-2',
		    'driver-b-3',
		    'driver-b-4',
		    'driver-b-5',
		    'driver-b-6',
		    'driver-b-7',
		    'driver-b-8',
		    'driver-b-9',
		    'driver-b-10',
		    'driver-b-11',
		    'driver-b-12',
		    'driver-b-13',
		    'driver-b-14',
		    'driver-b-15',
		    'driver-b-16',
		    'driver-b-17',
		    'driver-b-18',
		    'driver-t-1',
		    'driver-t-2',
		    'driver-t-3',
		    'driver-t-4',
		    'driver-t-5',
		    'driver-t-6',
		    'driver-t-7',
		    'driver-t-8',
		    'driver-t-9',
		    'driver-t-10',
		    'driver-t-11',

		    'passion-b-1',
		    'passion-b-2',
		    'passion-b-3',
		    'passion-b-4',
		    'passion-b-5',
		    'passion-b-6',
		    'passion-b-7',
		    'passion-b-8',
		    'passion-b-9',
		    'passion-t-1',
		    'passion-t-2',
		    'passion-t-3',
		    'passion-t-4',
		    'passion-t-5',

		    'skills-b-1',
		    'skills-b-2',
		    'skills-b-3',
		    'skills-b-4',
		    'skills-b-5',
		    'skills-b-6',
		    'skills-b-7',
		    'skills-b-8',
		    'skills-b-9',
		    'skills-b-10',
		    'skills-b-11',
		    'skills-b-12',
		    'skills-b-13',
		    'skills-b-14',
		    'skills-b-15',
		    'skills-b-16',
		    'skills-b-17',
		    'skills-b-18',
		    'skills-b-19',
		    'skills-b-20',
		    'skills-b-21',
		    'skills-t-1',
		    'skills-t-2',
		    'skills-t-3',
		    'skills-t-4',
		    'skills-t-6',
		    'skills-t-7',
		    'skills-t-8',
		    'skills-t-9',
		    'skills-t-10',
		    'skills-t-11',

		    'discovery-b-1',
		    'discovery-b-2',
		    'discovery-b-3',
		    'discovery-b-4',
		    'discovery-b-5',
		    'discovery-b-6',
		    'discovery-b-7',
		    'discovery-b-8',
		    'discovery-b-9',
		    'discovery-b-10',
		    'discovery-b-11',
		    'discovery-b-12',
		    'discovery-b-13',
		    'discovery-b-14',
		    'discovery-b-15',
		    'discovery-b-16',
		    'discovery-b-17',
		    'discovery-b-18',
		    'discovery-b-19',
		    'discovery-b-20',
		    'discovery-b-21',
		    'discovery-t-1',
		    'discovery-t-2',
		    'discovery-t-3',
		    'discovery-t-4',
		    'discovery-t-5',
		    'discovery-t-6',
		    'discovery-t-7',
		    'discovery-t-8',
		    'discovery-t-9',
		    'discovery-t-10',
		    'discovery-t-11',
		    'discovery-t-12',
		    'discovery-t-13',
		    'discovery-t-14',
		    'discovery-t-15',

		    'conclusion-t-1',
		    'conclusion-t-2',
		    'conclusion-t-3',
		    'conclusion-t-4',
		    'conclusion-t-5',
		    'conclusion-b-1',
		    'conclusion-b-2',
		    'conclusion-b-3',
		    'conclusion-b-4',

		    'final-t-1',
		    'final-b-1',

		    'dynamic-b-3-1-air',
		    'dynamic-b-3-1-water',
		    'dynamic-b-3-1-earth',
		    'dynamic-b-3-1-fire',

		    'dynamic-b-3-2-air-sunny',
		    'dynamic-b-3-2-air-shadow',
		    'dynamic-b-3-2-water-sunny',
		    'dynamic-b-3-2-water-shadow',
		    'dynamic-b-3-2-earth-sunny',
		    'dynamic-b-3-2-earth-shadow',
		    'dynamic-b-3-2-fire-sunny',
		    'dynamic-b-3-2-fire-shadow',

		    'dynamic-b-3-3-air',
		    'dynamic-b-3-3-water-air',
		    'dynamic-b-3-3-earth-air',
		    'dynamic-b-3-3-fire-air',

		    'dynamic-b-3-3-water',
		    'dynamic-b-3-3-air-water',
		    'dynamic-b-3-3-earth-water',
		    'dynamic-b-3-3-fire-water',

		    'dynamic-b-3-3-earth',
		    'dynamic-b-3-3-air-earth',
		    'dynamic-b-3-3-water-earth',
		    'dynamic-b-3-3-fire-earth',

		    'dynamic-b-3-3-fire',
		    'dynamic-b-3-3-air-fire',
		    'dynamic-b-3-3-water-fire',
		    'dynamic-b-3-3-earth-fire',
	    ];

	    $form_files = [
		    'cover-fb-1',
		    'cover-fb-2',
		    'cover-fb-3',
		    'cover-fb-4',
		    'cover-fb-5',
		    'intro-fb-1',
		    'intro-fb-5',
		    'driver-fb-1',
		    'driver-fb-9',
		    'passion-fb-1',
		    'passion-fb-2',
		    'passion-fb-7',
		    'passion-fb-8',
		    'skills-fb-1',
		    'skills-fb-2',
		    'skills-fb-3',
		    'skills-fb-4',
		    'skills-fb-14',
		    'discovery-fb-1',
		    'discovery-fb-2',
		    'discovery-fb-3',
		    'discovery-fb-4',
		    'discovery-fb-5',
		    'discovery-fb-6',
		    'discovery-fb-7',
		    'discovery-fb-8',
		    'discovery-fb-9',
		    'conclusion-fb-1',

		    'final-fb-1',
		    'final-fb-2',

		    'dynamic-fb-3-1-air',
		    'dynamic-fb-3-1-water',
		    'dynamic-fb-3-1-earth',
		    'dynamic-fb-3-1-fire',
	    ];

	    $form_data = [];

	    if($form_fields){
		    foreach ( $form_fields as $item ) {
			    $form_data[$item] = Options::getOption( $item );
		    }
	    }

	    if($form_files){
		    foreach ( $form_files as $item ) {
			    $form_data[$item] = Options::getOption( $item );
		    }
	    }

	    $user_id = Yii::$app->user->id;

	    $user = User::findOne($user_id);

	    $profile = UserProfile::find()->where(['user_id' =>$user_id])->one();

	    $utcdata = UserApiData::findOne(['user_id' => $user_id]);

	    $utcreport = NULL;

	    if($utcdata){
		    $utc_id = $utcdata->utc_id;
		    $utcdata = UtcObject::initFromJSON(ApiController::getUTCData($utc_id));
		    $utcreport = UtcReportObject::initFromJSON(ApiController::getReportData($user->internal_user_id, $user->getExternalId()));
	    }

		return $this->render('full-utc-report', ['form_data' => $form_data, 'utcdata' => $utcdata, 'profile' => $profile, 'utcreport' => $utcreport ]);
    }

	function requireToVar($file){
		ob_start();
		require($file);
		return ob_get_clean();
	}

	/**
	 * @return string
	 * @throws \yii\db\StaleObjectException
	 */
	public function actionDataManagementSettings(){
	    $user_id = Yii::$app->user->id;
		$user = User::findOne($user_id);

	    $user_management_data = UserManagementData::findOne(['user_id'=>$user_id]);

	    if(Yii::$app->request->isPost){

	    	$save_fields = Yii::$app->request->post('UserManagementData');
	    	if($save_fields){
//				    $user_management_data->share_profile_data =
//					    isset($save_fields['share_profile_data'])?1:$user_management_data->is_share_profile_data?0:1;

				    if($user_management_data->is_share_profile_data){
				    	$old_share_profile_data = $user_management_data->share_profile_data;
					    $user_management_data->share_profile_data =
						    isset($save_fields['share_profile_data'])?1:0;
					    if($old_share_profile_data == 0 && $user_management_data->share_profile_data){
					    	MailSender::sendToUser_disableSharingProfileData($user);
					    }
				    }

				    $user_management_data->emails_activities = isset($save_fields['emails_activities'])?1:0;
				    $user_management_data->emails_marketing = isset($save_fields['emails_marketing'])?1:0;
				    $user_management_data->usage_profile_data = isset($save_fields['usage_profile_data'])?1:0;
				    $user_management_data->usage_basic_utc =
					    isset($save_fields['usage_basic_utc'])?1:($user_management_data->is_basic_utc?0:1);
				    $user_management_data->usage_full_utc =
					    isset($save_fields['usage_full_utc'])?1:($user_management_data->is_full_utc?0:1);
				    $user_management_data->usage_opport_data =
					    isset($save_fields['usage_opport_data'])?1:($user_management_data->is_opportunity?0:1);


			    	if($user_management_data->save()){
			    		$applyNewRulesObj = new UserManagementDataRules(User::findOne($user_id));
			    		$applyNewRulesObj->check();
			    		return $this->redirect(['site/index']);
				    }
		    }
	        /** Export data action */
		    if(Yii::$app->request->post('export-my-data')){
				UserExportData::sendExportData(User::findOne($user_id), 'user-export-data-email');
		    }
		    /** Remove data action */
		    if(Yii::$app->request->post('delete-my-data')){
			    UserExportData::sendExportData($user, 'user-delete-data-email');
			    /** TODO remove function here */
			    $delete_object = new UserRemover($user);
			    $delete_object->remove();
			    return $this->redirect(['site/index']);
		    }
	    }

    	return $this->render('data-management-settings',
		    compact(
		    	'user_management_data',
			    'user'
		    )
	    );
    }

    function actionTest(){
//		$login = RocketChat::login('rudenko', 'password');
//	    echo '========== Find user by email =============';
//		if($login->status === 'success'){
//			$userId = $login->data->userId;
//			$authToken = $login->data->authToken;
//
//			echo "$userId - $authToken";
//
//			$users_list = RocketChatUsers::findByEmail(
//				RocketChatHttpClient::setAuthToken($userId, $authToken),
//				"anna.sergeevna4440@gmail.com");
//			echo '<pre>';
//			print_r($users_list);
//			echo '</pre>';

//			$group_create = RocketChatGroups::create(
//				RocketChatHttpClient::setAuthToken($userId, $authToken),
//				'123456789123456789123456789123456789'
//			);
//			echo '<pre>';
//			print_r($group_create);
//			echo '</pre>';

//team id 3CvWrAXCW473eZDoA

			//Invite user to group
//			if($users_list->success && $users_list->count > 0){
//				$_user_id = $users_list->users[0]->_id;
//				$invite_response = RocketChatGroups::invite(
//					RocketChatHttpClient::setAuthToken($userId, $authToken),
//					'3CvWrAXCW473eZDoA',
//					$_user_id
//				);
//				echo '<pre>';
//				print_r($invite_response);
//				echo '</pre>';
//			}

			//Kick user to group
//			if($users_list->success && $users_list->count > 0){
//				$_user_id = $users_list->users[0]->_id;
//				$invite_response = RocketChatGroups::kick(
//					RocketChatHttpClient::setAuthToken($userId, $authToken),
//					'3CvWrAXCW473eZDoA',
//					$_user_id
//				);
//				echo '<pre>';
//				print_r($invite_response);
//				echo '</pre>';
//			}
//
//
//		}
//
//		echo '========== Register new user =============';

//		$registration_response = RocketChatUsers::register(
//			'rudenkowe',
//			'rudenko.programmer@gmaie.com',
//			'',
//			'Maksim Rudenko'
//		);
	    /**
	     * Ошибки ErrorType error-field-unavailable  - имя пользователя существует
	     * Ошибки ErrorType 403  - email не верный
	     *
	     */

//	    echo '<pre>';
//	    print_r($registration_response);
//	    echo '</pre>';

//	    upTemS6zY9uzmWzij
//	    echo "Chanel name is = ".RocketChatCT::createChanelByName('new-chanel-name');

	    print_r(RocketChatCT::addUserToChanel('upTemS6zY9uzmWzij', 'xeguwihek@nickrizos.com'));

		die();
    }
}

