*/
class FormController extends Controller
{
    /**
     * @var FileuploadController
     */
    protected $fileUploadController;
    /**
     * Create a new controller instance.
     * Constructor to check.
     *
     * @return void
     */
    public function __construct(TicketWorkflowController $TicketWorkflowController, FileuploadController $fileUploadController)
    {
        $this->middleware('board');
        // creating a TicketController instance
        $this->TicketWorkflowController = $TicketWorkflowController;
        $this->fileUploadController = $fileUploadController;
    }
    /**
     * getform.
     *
     * @param type Help_topic $topic
     *
     * @return type
     */
    public function getForm(Help_topic $topic, CountryCode $code)
    {
        if (\Config::get('database.install') == '%0%') {
            return \Redirect::route('licence');
        }
        $settings = CommonSettings::select('status')->where('option_name', '=', 'send_otp')->first();
        $email_mandatory = CommonSettings::select('status')->where('option_name', '=', 'email_mandatory')->first();
        if (!\Auth::check() && ($settings->status == 1 || $settings->status == '1')) {
            return redirect('auth/login')->with(['login_require' => 'Please login to your account for submitting a ticket', 'referer' => 'form']);
        }
        $location = GeoIP::getLocation();
        $phonecode = $code->where('iso', '=', $location->iso_code)->first();
        if (System::first()->status == 1) {
            $topics = $topic->get();
            $codes = $code->get();
            if ($phonecode->phonecode) {
                $phonecode = $phonecode->phonecode;
            } else {
                $phonecode = '';
            }
            [$max_size_in_bytes, $max_size_in_actual] = $this->fileUploadController->file_upload_max_size();
            return view('themes.default1.client.helpdesk.form', compact('topics', 'codes', 'email_mandatory', 'max_size_in_bytes', 'max_size_in_actual'))->with('phonecode', $phonecode);
        } else {
            return \Redirect::route('home');
        }
    }
    /**
     * This Function to post the form for the ticket.
     *
     * @param type Form_name    $name
     * @param type Form_details $details
     *
     * @return type string
     */
    public function postForm($id, Help_topic $topic)
    {
        if ($id != 0) {
            $helptopic = $topic->where('id', '=', $id)->first();
            $custom_form = $helptopic->custom_form;
            $values = Fields::where('forms_id', '=', $custom_form)->get();
            if (!$values) {
            }
            if ($values) {
                foreach ($values as $form_data) {
                    if ($form_data->type == 'select') {
                        $form_fields = explode(',', $form_data->value);
                        $var = '';
                        foreach ($form_fields as $form_field) {
                            $var .= '';
                        }
                        echo '
';
                    } elseif ($form_data->type == 'radio') {
                        $type2 = $form_data->value;
                        $vals = explode(',', $type2);
                        echo '
';
                        foreach ($vals as $val) {
                            echo ' '.$form_data->value.'       ';
                        }
                        echo '
';
                    } elseif ($form_data->type == 'textarea') {
                        $type3 = $form_data->value;
                        echo '
';
                    } elseif ($form_data->type == 'checkbox') {
                        $type4 = $form_data->value;
                        $checks = explode(',', $type4);
                        echo '
';
                        foreach ($checks as $check) {
                            echo '  '.$check;
                        }
                    } else {
                        echo '
';
                    }
                }
                echo '
';
            }
        } else {
            return;
        }
    }
    /**
     * Posted form.
     *
     * @param type Request $request
     * @param type User    $user
     */
    public function postedForm(User $user, ClientRequest $request, Ticket $ticket_settings, Ticket_source $ticket_source, Ticket_attachments $ta, CountryCode $code)
    {
        try {
            $form_extras = $request->except('Name', 'Phone', 'Email', 'Subject', 'Details', 'helptopic', '_wysihtml5_mode', '_token', 'mobile', 'Code', 'priority', 'attachment');
            $name = $request->input('Name');
            $phone = $request->input('Phone');
            if ($request->input('Email')) {
                if ($request->input('Email')) {
                    $email = $request->input('Email');
                } else {
                    $email = null;
                }
            } else {
                $email = null;
            }
            $subject = $request->input('Subject');
            $details = $request->input('Details');
            $phonecode = $request->input('Code');
            if ($request->input('mobile')) {
                $mobile_number = $request->input('mobile');
            } else {
                $mobile_number = null;
            }
            $status = $ticket_settings->first()->status;
            $helptopic = $request->input('helptopic');
            $helpTopicObj = Help_topic::where('id', '=', $helptopic);
            if ($helpTopicObj->exists() && ($helpTopicObj->value('status') == 1)) {
                $department = $helpTopicObj->value('department');
            } else {
                $defaultHelpTopicID = Ticket::where('id', '=', '1')->first()->help_topic;
                $department = Help_topic::where('id', '=', $defaultHelpTopicID)->value('department');
            }
            $sla = $ticket_settings->first()->sla;
            // $priority = $ticket_settings->first()->priority;
            $default_priority = Ticket_Priority::where('is_default', '=', 1)->first();
            $user_priority = CommonSettings::where('option_name', '=', 'user_priority')->first();
            if (!$request->input('priority')) {
                $priority = $default_priority->priority_id;
                if ($helpTopicObj->exists() && ($helpTopicObj->value('status') == 1)) {
                    $priority = $helpTopicObj->value('priority');
                }
            } else {
                $priority = $request->input('priority');
            }
            $source = $ticket_source->where('name', '=', 'web')->first()->id;
            $attachments = $request->file('attachment');
            $collaborator = null;
            $assignto = null;
            if ($helpTopicObj->exists() && ($helpTopicObj->value('status') == 1)) {
                $assignto = $helpTopicObj->value('auto_assign');
            }
            $auto_response = 0;
            $team_assign = null;
            if ($phone != null || $mobile_number != null) {
                $location = GeoIP::getLocation();
                $geoipcode = $code->where('iso', '=', $location->iso_code)->first();
                if ($phonecode == null) {
                    $data = [
                        'fails'              => Lang::get('lang.country-code-required-error'),
                        'phonecode'          => $geoipcode->phonecode,
                        'country_code_error' => 1,
                    ];
                    return Redirect::back()->with($data)->withInput($request->except('password'));
                } else {
                    $code = CountryCode::select('phonecode')->where('phonecode', '=', $phonecode)->get();
                    if (!count($code)) {
                        $data = [
                            'fails'              => Lang::get('lang.incorrect-country-code-error'),
                            'phonecode'          => $geoipcode->phonecode,
                            'country_code_error' => 1,
                        ];
                        return Redirect::back()->with($data)->withInput($request->except('password'));
                    }
                }
            }
            event(new \App\Events\ClientTicketFormPost($form_extras, $email, $source));
            $result = $this->TicketWorkflowController->workflow($email, $name, $subject, $details, $phone, $phonecode, $mobile_number, $helptopic, $sla, $priority, $source, $collaborator, $department, $assignto, $team_assign, $status, $form_extras, $auto_response);
            // dd($result);
            if ($result[1] == 1) {
                $ticketId = Tickets::where('ticket_number', '=', $result[0])->first();
                $thread = Ticket_Thread::where('ticket_id', '=', $ticketId->id)->first();
                if ($attachments != null) {
                    $storage = new \App\FaveoStorage\Controllers\StorageController();
                    $storage->saveAttachments($thread->id, $attachments);
//                    foreach ($attachments as $attachment) {
//                        if ($attachment != null) {
//                            $name = $attachment->getClientOriginalName();
//                            $type = $attachment->getClientOriginalExtension();
//                            $size = $attachment->getSize();
//                            $data = file_get_contents($attachment->getRealPath());
//                            $attachPath = $attachment->getRealPath();
//                            $ta->create(['thread_id' => $thread->id, 'name' => $name, 'size' => $size, 'type' => $type, 'file' => $data, 'poster' => 'ATTACHMENT']);
//                        }
//                    }
                }
                // dd($result);
                return Redirect::back()->with('success', Lang::get('lang.Ticket-has-been-created-successfully-your-ticket-number-is').' '.$result[0].'. ');
            } else {
                return Redirect::back()->withInput($request->except('password'))->with('fails', Lang::get('lang.failed-to-create-user-tcket-as-mobile-has-been-taken'));
            }
        } catch (\Exception $ex) {
            return redirect()->back()->with('fails', $ex->getMessage());
        }
//        dd($result);
    }
    /**
     * reply.
     *
     * @param type $value
     *
     * @return type view
     */
    public function post_ticket_reply($id, Request $request)
    {
        try {
            $comment = $request->input('comment');
            if (!empty($comment)) {
                $tickets = Tickets::where('id', '=', $id)->first();
                $thread = Ticket_Thread::where('ticket_id', '=', $tickets->id)->first();
                $subject = $thread->title.'[#'.$tickets->ticket_number.']';
                $body = $comment;
                $user_cred = User::where('id', '=', $tickets->user_id)->first();
                $fromaddress = $user_cred->email;
                $fromname = $user_cred->user_name;
                $phone = '';
                $phonecode = '';
                $mobile_number = '';
                $helptopic = $tickets->help_topic_id;
                $sla = $tickets->sla;
                $priority = $tickets->priority_id;
                $source = $tickets->source;
                $collaborator = '';
                $dept = $tickets->dept_id;
                $assign = $tickets->assigned_to;
                $form_data = null;
                $team_assign = null;
                $ticket_status = null;
                $auto_response = 0;
                $this->TicketWorkflowController->workflow($fromaddress, $fromname, $subject, $body, $phone, $phonecode, $mobile_number, $helptopic, $sla, $priority, $source, $collaborator, $dept, $assign, $team_assign, $ticket_status, $form_data, $auto_response);
                return \Redirect::back()->with('success1', Lang::get('lang.successfully_replied'));
            } else {
                return \Redirect::back()->with('fails1', Lang::get('lang.please_fill_some_data'));
            }
        } catch (Exception $e) {
            return \Redirect::back()->with('fails1', $e->getMessage());
        }
    }
    public function getCustomForm(Request $request)
    {
        $html = '';
        $helptopic_id = $request->input('helptopic');
        $helptopics = new Help_topic();
        $helptopic = $helptopics->find($helptopic_id);
        if (!$helptopic) {
            throw new Exception('We can not find your request');
        }
        $custom_form = $helptopic->custom_form;
        if ($custom_form) {
            $fields = new Fields();
            $forms = new \App\Model\helpdesk\Form\Forms();
            $form_controller = new \App\Http\Controllers\Admin\helpdesk\FormController($fields, $forms);
            $html = $form_controller->renderForm($custom_form);
        }
        return $html;
    }
}