<?php namespace App;
use Illuminate\Http\Request;


/**
 * Created by PhpStorm.
 * User: sunil khorwal
 * Date: 6/6/16
 * Time: 1:52 PM
 */
class _Slack
{
    private $request;
    private $users = array();
    const INTERNAL_DEV = 'internaldev';
    const CONCIERGE = 'concierge';
    const TECH_BUG = 'tech-bug';
    const BD = 'bd';
    const ACCOUNT = 'accounts';
    const OUTBOUND_MARKETING = 'outbound-marketing';
    public $isBot = false;

    /**
     * Slack constructor.
     * @param Request $request
     */
    public function __construct(Request $request){
        $this->request = $request;
        $this->isBot = $this->request->has('isBot') ? true : false;
    }

    /**
     * @return $this
     */
    public function connect(){
        (new SlackFire(
            SlackModal::setup()
                ->setChannel($this->request->get('channel'))
                ->setUsername('Credit Fair Alert')
                ->setText($this->request->has('text') ? $this->request->get('text') : '')
                ->setIconEmoji(':ghost:')
                ->setIconUrl('')
                ->setFallBack('Required plain-text summary of the attachment.')
                ->setColor('#36a64f')
                ->setPreText('')
                ->setAuthorName('')
                ->setAuthorLink('')
                ->setAuthorIcon('')
                ->setCallbackId($this->request->has('callback_id') ? $this->request->get('callback_id') : '')
                ->setReplaceOriginal($this->request->has('replace_original') ? $this->request->get('replace_original') : '')
                ->setResponseType($this->request->has('response_type') ? $this->request->get('response_type') : '')
                ->setResponseUrl($this->request->has('response_url') ? $this->request->get('response_url') : '')
                ->setAuthorIcon('')
                ->setAttachmentTitle($this->request->get('attachment_title'))
                ->setAttachmentText($this->getAttachmentTextWithUserByChannel($this->request->get('channel'),$this->request->get('attachment_text'),$this->request->get('instance_type')))
                ->setTitleLink('https://creditfair.in/')
                ->setText('')
                ->setActionName($this->request->get('action_name'))
                ->setActionText($this->request->get('action_text'))
                ->setActionType('button')
                ->setActionValue($this->request->get('action_value'))
                ->setPureFields(($this->request->get('pure_fields')) ? $this->request->get('pure_fields') : false)
                ->setPureFieldsArray($this->request->get('pure_fields_values'))
                ->setFieldsTitle('Priority')
                ->setFieldsValue('High')
                ->setFieldsShort(true)
                ->setImageUrl('http://my-website.com/path/to/image.jpg')
                ->setThumbUrl('http://example.com/path/to/thumb.png')
                ->setFooter('CreditFair')
                ->setFooterIcon('https://credifair.in/assets/img/WTFAV.png')
                ->setBot($this->isBot)
                ->setTs()
        ))->send();
        return $this;
    }

    /**
     * @param $message
     */
    public function wowtablesSocket($message){
        (new Socket(new Request($message)))->createSocket();
    }

    /**
     * @param $user
     * @return string
     */
    public function slackUsers($user){
        $this->users =  array(
            'sunil' => '@UCESJP8LQ',
            'kunal' => '@U036A8AKG',
            'durgesh' => '@U03FF8V0T',
            'deepajain' => '@U03FFLR47',
            'nikhil' => '@U03FH55CJ',
            'rooshabh' => '@U03S6LPNJ',
            'priyankaccounts' => '@U04STLZAW',
            'disha' => '@U068STL94',
            'bharat.p.jain' => '@U068VCVB9',
            'karishmaverenkar' => '@U0ESEAPA5',
            'yashvardhan' => '@U0G1TASTD',
            'reema' => '@U0LH6ARFY',
            'shivaniag' => '@U20MXCZV1',
            'mihir' => '@U2FSBCS90',
            'rukshad' => '@U2EKM7QEA',
            'shiphrah' => '@U74GJCBU0',
            'ayushi' => '@U7PG3PJ72',
            'sonya' => '@U8N8EQQ3Y',
            'sancheeta' => '@UA9B4J8TD',
            'Parinaz' => '@UAL2ABE9Y'
        );

        $userString = '';
        foreach ($user as $segment){
            $userString .= '<'.$this->users[$segment]."|".$segment.'> ';
        }
        return $userString;
    }

    /**
     * @param $channel
     * @param $text
     * @param $type
     * @return string
     */
    public function getAttachmentTextWithUserByChannel($channel, $text, $type){

        switch ($channel){
            case self::CONCIERGE:
                $user = array('shiphrah','karishmaverenkar', 'Parinaz');
                if($type == 'app_login_manager')
                    $user[] = 'sunil';
                if($type == 'reservation_rejected'){$user[] = 'deepajain';$user[] = 'kunal';}
                $userString = $this->slackUsers($user);
                return $text.' '.$userString;
                break;
            case self::INTERNAL_DEV:
                $user = array('sunil');
                if($type == 'reservation_context'){$user[] = 'kunal';}
                if($type == 'server_logging'){$user[] = 'kunal';$user[] = 'karishmaverenkar';$user[] = 'Parinaz';}
                $userString = $this->slackUsers($user);
                return $text.' '.$userString;
                break;
            case self::BD:
                $user = array('shiphrah','karishmaverenkar');
                if($type == 'mou_expire'){$user[] = 'deepajain';}else{$user[] = 'Parinaz';}
                $userString = $this->slackUsers($user);
                return $text.' '.$userString;
                break;
            case self::ACCOUNT:
                $user = array('deepajain','kunal','karishmaverenkar');
                if($type == 'missing_contacts'){
                    $user = array('priyankaccounts','karishmaverenkar');
                }
                $userString = $this->slackUsers($user);
                return $text.' '.$userString;
                break;
            case self::TECH_BUG:
                return $text;
                break;
            case self::OUTBOUND_MARKETING:
                $user = array('nikhil','Parinaz','shiphrah');
                $userString = $this->slackUsers($user);
                return $text.' '.$userString;
                break;
            default:
                $user = array('sunil');
                if(!$this->isBot){
                    $userString = $this->slackUsers($user);
                    return $userString;
                }else{
                    $this->slackUsers($user);
                    $key = array_search (explode('!',$text)[1], $this->users);
                    $userString = explode('!',$text)[0];
                    $userString .= '<'.$this->users[$key]."|".$key.'> ';
                    return $userString;
                }
                break;
        }
    }

    /**
     * @param $message
     * @return array
     */
    public static function InteractiveMessage($message,$callback_id){

        $button = static::getButtons($callback_id);
        $data = array(
            'action_name'  => array('game','game'),
            'action_text'  => $button['text'],
            'action_type'  => array('button','button'),
            'action_value' => $button['value'],
            'text' => isset($message['attachment_title']) ? $message['attachment_title'] : $message['attachment_text'],
            'fallback' => 'We are unable to process this request'
        );

        return array_merge($message,$data);

    }

    public static function getButtons($callback){

        if (strpos($callback, '|') !== false) {
            $_callback = explode('|',$callback);
            $callback = (isset($_callback[0])) ? $_callback[0] : $callback;
        }


        switch ($callback){
            case '_callback_request' :
                $button = array('text'=>array('Call', 'Call offline'),'value' =>
                    array('call','call_offline'));
                break;
            default:
                $button = array('text'=>array('Acknowledge', 'Mark Resolved'), 'value' =>
                    array('acknowledge','mark_resolved'));
                break;
        }

        return $button;
    }
}