<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Authentication extends Controller {
        
        public function before() {
            parent::before();
            if(UTF8::strcasecmp($this->request->action(), 'logout')) {
                $user = User::instance();
                if($user->isSignedIn()) {
                    $request = $user->Type . '/index';
                    $page = Request::factory($request)->execute();
                    $this->response->body($page);
                }
            }
        }


        protected function getUpdates()
        {
            $fp = fopen(APPPATH.'updates.txt', 'r');
            $updates['Date'] = fgets($fp, 999);
            $text = '<ol>';
            if ($fp) {
                while (!feof($fp)) {
                    $text .= '<li>'.fgets($fp, 999).'</li>';
                }
            }
            $text .= '</ol>';
            $updates['Text'] = $text;
            return $updates;
        }

        private function sign()
        {
            if(!User::instance()->isSignedIn())
            {
                $type = $this->request->param('type');
                $type = empty($type)? 'in': $type;
                $twig = Twig::factory('sign/'.$type);
                
                $twig->Updates = Model_System::getChangeLog();
                $this->response->body($twig);
            }
        }

        public function action_enter_backdoor()
        {
            $this->sign();
        }

        public function action_enter_frontdoor()
        {
            $admission = true;
            $isNotSigned = !User::instance()->isSignedIn();
            $isNotAdmin = !User::instance()->isAdmin();

            if($isNotSigned || $isNotAdmin)
            {
                $admission = !$this->check_maintenance();
            }

            if ($admission) {
                $this->sign();
            } else
                User::instance()->signOut();
        }

        public function action_remind()
        {
            if(!User::instance()->isSignedIn())
            {
                $twig = Twig::factory('sign/remindpass');
                $twig->Updates = self::getUpdates();
                $this->response->body($twig);
            }
        }
        
        public function action_endremind()
        {
            $token = $this->request->param('token');
            if (!Account::instance()->checkToken($token)) {
                $message = "Данная ссылка для восстановления пароля более не действительна!\n" .
                    "Либо истекло время действия ссылки, либо она уже была использована.";
                throw HTTP_Exception::factory(403, $message);
            }

            if (!User::instance()->isSignedIn()) {
                $twig = Twig::factory('sign/changepass');
                $twig->Updates = self::getUpdates();
                $twig->Token = $token;
                $this->response->body($twig);
            }
        }
        
        public function action_logout()
        {
            User::instance()->signOut();
            $this->redirect('sign', 302);
        }

        private function check_maintenance()
        {
            $maintenance_info = Model_Account::getMaintenanceInfo();
            if ($maintenance_info['active']) {
                $this->response->status(503);
                $twig = Twig::factory('errors/http');
                $twig->title = 'Закрыто на техобслуживание!';
                $twig->code = 503;
                $twig->message = "Восстановление работы сервиса: " . $maintenance_info['return'];
                $this->response->body($twig);
                return true;
            }
            else
                return false;
        }

        public function action_check_maintenance()
        {
            $this->check_maintenance();
        }

} // End Welcome