<?php

namespace Option\Lib;

use Dever;

class Agreement
{
    private $font_size = 12;

    # 查看合同
    public function show_api()
    {
        $p = Dever::input('p');
        if (!$p) {
            Dever::alert('传入参数有误');
        }
        $p = Dever::json_decode(Dever::decode($p));
        if (!$p) {
            Dever::alert('传入参数有误');
        }
        $source = $p['source'];
        if ($source == 2) {
            # 获取当前登录的uid
            $aid = Dever::load('passport/user')->check(false);
            $aid = 2;
            if (!$aid || $aid <= 0) {
                Dever::alert('请先登录');
            }
            
        } else {
            Dever::load('manage/auth')->init();
            $aid = false;
        }
        $agreement_id = $p['agreement_id'];
        $status = $p['status'];
        $id = $p['id'];

        if ($status == 1) {
            $info = Dever::db('option/account')->find($id);
            $member = Dever::db('option/member')->find($info['mid']);
            $info['name'] = $member['name'];
            $info['mobile'] = $member['mobile'];
            $info['idcard'] = $member['idcard'];
            $info['aid'] = $id;
            $info['create_state'] = 2;
            $info['sign'] = '';
        } elseif ($status == 2) {
            $info = Dever::db('option/agreement')->find($id);
            if (!$info) {
                Dever::alert('未生成合同');
            }
            $info['create_state'] = 1;
            $agreement_id = $info['agreement_id'];
        }
        $agreement = Dever::db('setting/agreement')->find($agreement_id);
        if (!$agreement) {
            Dever::alert('合同模板不存在');
        }

        if ($aid && $aid != $info['aid']) {
            //Dever::alert('您没有权限查看');
        }

        if (isset($p['date'])) {
            $info['jiaofu_date'] = $p['date'];
        }
        if (isset($p['total'])) {
            $info['jiaofu_total'] = $p['total'];
        }
        if (isset($p['qiquan'])) {
            $info['jiaofu_qiquan'] = $p['qiquan'];
        }
        if (isset($p['yuanshi'])) {
            $info['jiaofu_yuanshi'] = $p['yuanshi'];
        }

        $method = 'pdf_' . $agreement['type'];
        return $this->$method($agreement, $info);
    }

    # 生成跳转链接
    public function location_api()
    {
        Dever::load('manage/auth')->init();
        $id = Dever::input('id');
        $info = Dever::db('option/agreement')->find($id);
        $info = $this->name($info['agreement_id'], $info, 2, 3);

        Dever::location($info[1]);
    }

    # 合同名称
    public function name($agreement, $info, $status = -1, $source = 1, $date = false, $total = false, $qiquan = false, $yuanshi = false)
    {
        if (!$agreement) {
            $agreement = Dever::db('setting/agreement')->find(array('type' => 6));
            if (!$agreement) {
                Dever::alert('协议模板不存在');
            }
        }
        if (is_numeric($agreement)) {
            $agreement = Dever::db('setting/agreement')->find($agreement);
        }
        $name = $agreement['name'];
        if (strstr($name, '{name}')) {
            $name = str_replace('{name}', $info['name'], $name);
        }
        if (strstr($name, '{date}')) {
            if (isset($info['sdate'])) {
                $sdate = date('Y年m月d日', $info['sdate']);
            } else {
                $sdate = date('Y年m月d日');
            }
            $name = str_replace('{date}', $sdate, $name);
        }

        if ($status > 0) {
            $param = array();
            $param['source'] = $source;
            $param['status'] = $status;
            $param['id'] = $info['id'];
            $param['agreement_id'] = $agreement['id'];
            if ($date) {
                $param['date'] = $date;
            }
            if ($total) {
                $param['total'] = $total;
            }
            if ($qiquan) {
                $param['qiquan'] = $qiquan;
            }
            if ($yuanshi) {
                $param['yuanshi'] = $yuanshi;
            }
            $param = Dever::encode(Dever::json_encode($param));
            $link = Dever::url('option/lib/agreement.show?p=' . $param);
            if ($source == 1) {
                # 1 是未生成合同，预览
                # 2 是已生成合同
                $name = '<a href="'.$link.'" target="_blank">'.$name.'</a>';
            } else {
                return array($name, $link);
            }
        }

        return $name;
    }

    # 新建合同
    public function up($account, $date, $total, $qiquan, $yuanshi, $status = 1)
    {
        $member = Dever::db('option/member')->find($account['mid']);
        $agreement = Dever::db('setting/agreement')->find(array('type' => 6));
        if (!$agreement) {
            Dever::alert('协议模板不存在');
        }
        $qdate = time();
        $sdate = $qdate;
        $edate = strtotime('+3 year', $sdate);
        $where['aid'] = $account['id'];
        $where['agreement_id'] = $agreement['id'];
        $where['jiaofu_total'] = $total;
        $where['jiaofu_qiquan'] = $qiquan;
        $where['jiaofu_yuanshi'] = $yuanshi;
        $where['jiaofu_date'] = $date;

        $info = Dever::db('option/agreement')->find($where);

        $where['order_num'] = $this->getOrderId();
        $where['agreement_name'] = $this->name($agreement, $account);
        $where['sign'] = (isset($account['sign']) && $account['sign']) ? $account['sign'] : '';
        $where['name'] = $member['name'];
        $where['mobile'] = $member['mobile'];
        $where['idcard'] = $member['idcard'];
        $where['idcard_front'] = $account['idcard_front'];
        $where['idcard_back'] = $account['idcard_back'];
        $where['address'] = '';
        $where['status'] = $status;
        $where['udate'] = time();
        $where['qdate'] = $qdate;
        $where['sdate'] = $sdate;
        $where['edate'] = $edate;
        $where['status'] = 1;
        $where['audit'] = 2;

        $method = 'content_' . $agreement['type'];

        if ($info) {
            $up = $where;
            $up['content'] = Dever::array_encode($this->$method($agreement, $info));
            $up['where_id'] = $info['id'];
            $state = Dever::db('option/agreement')->update($up);
        } else {
            $up = $where;
            $up['content'] = Dever::array_encode($this->$method($agreement, $where));
            $state = Dever::db('option/agreement')->insert($up);
        }
        return $state;
    }

    # 更新合同内容
    public function upContent($id)
    {
        $state = false;
        $info = Dever::db('option/agreement')->find($id);
        if ($info) {
            $agreement = Dever::db('setting/agreement')->find($info['agreement_id']);

            if ($agreement) {
                $method = 'content_' . $agreement['type'];
                $up = array();
                $up['content'] = Dever::array_encode($this->$method($agreement, $info));
                $up['where_id'] = $info['id'];
                $state = Dever::db('option/agreement')->update($up);
            }
        }
        return $state;
    }

    # 作废并生成
    public function drop($id)
    {
        $info = Dever::db('option/agreement')->find($id);
        if ($info) {
            $agreement = Dever::db('setting/agreement')->find($info['agreement_id']);

            if ($agreement) {
                $state = Dever::db('option/agreement')->update(array('where_id' => $info['id'], 'status' => 3, 'audit' => 4));
                if ($state) {
                    # 生成新的合同
                    unset($info['id']);
                    unset($info['cdate']);
                    unset($info['sdate']);
                    unset($info['edate']);
                    unset($info['qdate']);
                    unset($info['sign']);
                    $account = Dever::db('option/account')->find($info['aid']);
                    $member = Dever::db('option/member')->find($account['mid']);

                    $info['name'] = $member['name'];
                    $info['idcard'] = $member['idcard'];
                    $info['mobile'] = $member['mobile'];

                    $info['sign'] = '';
                    $info['status'] = 1;
                    $info['audit'] = 2;
                    Dever::db('option/agreement')->insert($info);
                }
            }
        }
    }

    /**
     * 生成订单号
     *
     * @return mixed
     */
    public function getOrderId()
    {
        $where['order_num'] = Dever::order('AG');
        $state = Dever::db('option/agreement')->one($where);
        if (!$state) {
            return $where['order_num'];
        } else {
            return $this->getOrderId();
        }
    }

    public function content($name, $content)
    {
        return array('name' => $name, 'content' => $content);
    }

    public function content_6($agreement, $info)
    {
        $content = array();

        $content[] = $this->content('', '1、[中食民安（北京）科技有限公司]（“公司”）是一家按照中华人民共和国（“中国”）法律有效设立并合法存在的有限公司；');

        $content[] = $this->content('', '2、[ '.$info['name'].' ]（“激励对象”），为公司注册代理商。');

        $content[] = $this->content('', '公司依据此协议向激励对象交付期权。除本协议约定外，该期权激励交付需满足本公司董事会决议通过的《[中食民安（北京）科技有限公司]期权激励计划》（“期权激励计划”）中的关于代理商的各项条款规定。');

        $content[] = $this->content('', '期权激励交付的日期：[ '.$info['jiaofu_date'].' ]；');

        $content[] = $this->content('', '期权激励激励对象：[ '.$info['name'].' ]；');

        $content[] = $this->content('', '期权激励激励对象身份证号码：[ '.$info['idcard'].' ]；');

        $content[] = $this->content('', '期权激励方式：本协议下交付的期权激励为期权价值。');

        $content[] = $this->content('', '期权激励数量：依据本协议，激励对象将获得公司价值[ '.$info['jiaofu_qiquan'].' ]的期权，价值[ '.$info['jiaofu_yuanshi'].' ]的原始期权。');

        $content[] = $this->content('', '期权激励持股方式：经董事会同意，公司设立专门用于期权激励的有限合伙企业做为期权激励持股平台。在此情形下，激励对象所持有的期权为该有限合伙企业的权益份额。持股平台的存在不会影响激励对象通过期权激励在[中食民安（北京）科技有限公司]中的利益。');

        // $content[] = $this->content('', '期权的兑付安排：');

        // $content[] = $this->content('', '[引用交付条件] ');

        $content[] = $this->content('', '期权的有效期：期权在自交付日起的[10]年内有效。 ');

        $content[] = $this->content('', '激励对象可在期权有效期内行使期权。 ');

        $content[] = $this->content('', '激励对象在本协议上签字意味着激励对象同意本协议包含的所有条款和条件。');

        $content[] = $this->content('', '1.激励对象理解并同意其忠诚于公司，并努力为公司的发展做出积极的贡献是激励对象享有期权激励，持有公司激励期权并进而获取公司发展而带来的经济利益的前提。');

        $content[] = $this->content('', '2.在公司设立期权行权通道的前提下，激励对象应当向公司送达通知的方式行使期权。行权通知应表明需要行使的期权数量，及代持股平台及其管理人要求做出的任何陈述或签署的任何文件。公司收到上述文件后，应尽快推动完成相关的权益交割。');

        $content[] = $this->content('', '3.期权有效期满后，仍未兑付的期权失效，激励对象不得再兑付。');

        $content[] = $this->content('', '4.除代持股平台及其管理人事先书面同意，激励对象不得将其获得的期权和/或已经持有的激励期权向任何第三方转让、出售、赠予、抵押、质押或以其他任何方式处理。');

        $content[] = $this->content('', '5.激励对象同意，在任何时点，如出现以下任何一种情形，其所持有的未行使期权全部失效；其所持有的通过行使期权获得的激励期权，公司有权以行权价进行回购，激励对象需要无条件配合完成相关的变更手续。');

        $content[] = $this->content('', '5.1.违反法律、法规或公司的相关规定，以及双方签订的其他相关协议；');

        $content[] = $this->content('', '5.2.激励对象从事任何违法行为，且受到刑事处罚；');

        $content[] = $this->content('', '5.3.有不忠诚于公司的行为，包括但不限于从公司退出并加入与公司业务有直接或间接竞争的其他公司或实体，或从与公司的关联交易中获得利益（但事先向公司披露并经公司董事会批准的除外）；');

        $content[] = $this->content('', '5.4.激励对象实质违反其与公司之间的任何协议，包括但不限于泄露公司商业秘密等保密信息，实质上没有履行或拒绝履行义务；');

        $content[] = $this->content('', '5.5.激励对象违反公司任何规章制度并给公司的财产、声誉或其他人员或董事造成损失、损害或伤害；');

        $content[] = $this->content('', '5.6.激励对象有其他任何对公司业务、声誉或财务状况造成严重不良影响的行为；');

        $content[] = $this->content('', '6.激励对象同意，如果个人原因主动退出/放弃，且并未出现本协议第5条列示的情形；或激励对象因公司原因（业务转变等原因）被迫退出，且并未出现本协议第5条列示的情形');

        $content[] = $this->content('', '6.1.如果激励对象与公司解除合同关系发生在[中食民安（北京）科技有限公司]，或以[中食民安（北京）科技有限公司]为运营主体的其他法人于境内外证券交易所上市前，解除关系之日，激励对象持有的于当日尚未兑付的期权即时作废。');

        /*$content[] = $this->content('', '6.1.2.公司或其认可的第三方有权以不高于劳动关系解除之日，公司已完成的最近一轮融资估值30%的价格，再扣减相应的行权价格，赎回解除劳动关系之日，激励对象持有的已生效、未行权的期权；');

        $content[] = $this->content('', '6.1.3.解除劳动关系之日，激励对象持有的于当日尚未生效的期权即时作废。');

        $content[] = $this->content('', '6.2.如果激励对象与公司解除劳动关系发生在[引用注册公司名称]，或以[引用注册公司名称]为运营主体的其他法人于境内外证券交易所上市后：');

        $content[] = $this->content('', '6.2.1.解除劳动关系之日起的60日内，激励对象可行使解除劳动关系之日已生效、未行使的期权，逾60日后尚未行使的部分作废；');

        $content[] = $this->content('', '6.2.2.激励对象可继续持有通过行使期权获得的激励股份；');

        $content[] = $this->content('', '6.2.3.解除劳动关系之日，激励对象持有的于当日尚未生效的期权即时作废。');*/

        $content[] = $this->content('', '7.激励对象同意，如果因伤亡、丧失行为能力退出。且并未出现本协议第5条列示的情形：');

        $content[] = $this->content('', '7.1.如果激励对象与公司解除合同关系发生在[中食民安（北京）科技有限公司]，或以[中食民安（北京）科技有限公司]为运营主体的其他法人于境内外证券交易所上市前，解除关系之日，激励对象或其法定继承人可继续持有通过行使期权获得的激励股份。');

        /*$content[] = $this->content('', '7.1.1.公司有权以董事会确定的价格赎回解除劳动关系之日，激励对象持有的已生效、未行权的期权，该价格应高于本协议6.1.1条规定的价格；');

        $content[] = $this->content('', '7.1.2.公司有权以董事会确定的价格赎回解除劳动关系之日，激励对象持有的通过行使期权获得的激励股份，该价格应高于本协议6.1.2条规定的价格。');

        $content[] = $this->content('', '7.1.3.解除劳动关系之日，激励对象持有的于当日尚未生效的期权即时作废');

        $content[] = $this->content('', '7.2.如果激励对象与公司解除劳动关系发生在[引用注册公司名称]，或以[引用注册公司名称]为运营主体的其他法人于境内外证券交易所上市后：');

        $content[] = $this->content('', '7.2.1.解除劳动关系之日起的60日内，激励对象或其法定继承人可行使解除劳动关系之日已生效、未行使的期权，逾60日后尚未行使的部分作废；');

        $content[] = $this->content('', '7.2.2.激励对象或其法定继承人可继续持有通过行使期权获得的激励股份；');

        $content[] = $this->content('', '7.2.3.解除劳动关系之日，激励对象持有的于当日尚未生效的期权即时作废。');*/

        $content[] = $this->content('', '8.激励对象承诺履行所有必要的或公司要求的行为，协助公司或有关人员行使本协议第5条、第6条和第7条约定的期权和/或激励期权受让权利。这些行为包括但不限于文件的签署。为上述目的，激励对象在此不可撤销地指定公司及其授权的高级管理人员作为激励对象的全权代表以激励对象的名义并代替激励对象签署任何文件，以及为一切合法的行为，其法律效力等同于激励对象亲自为这些行为。');

        $content[] = $this->content('', '9.激励对象同意，在必要时，在符合监管要求的前提下，由公司指定的现有股东或有限合伙企业普通合伙人以协议方式代为持有被交付人已行权的期权。');

        $content[] = $this->content('', '10.保密');

        $content[] = $this->content('', '激励对象对本协议和期权激励计划的具体内容负有保密责任。未经管理人事先书面同意，激励对象不得将本协议和期权激励计划的具体内容披露给任何第三方。');

        $content[] = $this->content('', '11.违约');

        $content[] = $this->content('', '1）双方约定，任何一方对本协议的任何违反都将给对方造成无法挽回的损失。因此，一方违约的，遵守协议的一方应有权通过有关司法程序获得补偿。');

        $content[] = $this->content('', '2）如果需要通过法院或行政程序强制执行本协议的任何条款，违约方除承担违约责任外，还应赔偿对方合理和必要的诉讼支出损失，包括但不限于公证费、调查费、证据保全费，律师费等。');

        $content[] = $this->content('', '12.不可抗力');

        $content[] = $this->content('', '1）“不可抗力”是指任何超出本协议双方合理控制范围的事件，该事件应不可预见，或虽然可以预见，但通过合理努力无法阻止或避免其发生，且这类事件发生于本协议签字之后，并且阻止任何一方全部或部分履行本协议。');

        $content[] = $this->content('', '2）如果符合所有下述条件，一方未履行其本协议项下的任何义务, 不应被认为构成违约：');

        $content[] = $this->content('', 'i.如果不可抗力事件致使该方未能全部履行其在本协议项下的义务；');

        $content[] = $this->content('', 'ii.该方应尽所有合理的努力尽可能地减小不可抗力的后果；');

        $content[] = $this->content('', 'iii.在不可抗力事件发生后的五（5）天内，该方应书面通知对方，解释其未履行或不能完全履行其在本协议项下的义务的原因。');


        $content[] = $this->content('', '3）受不可抗力影响一方的权利和义务应延期行使和履行，延长的期限与不可抗力的持续时间相同。');


        $content[] = $this->content('', '13.争议的解决');

        $content[] = $this->content('', '因本协议或其违约、终止或无效而产生的或与本协议或其违约、终止或无效有关的任何争议、争论或诉求（以下称“争议”），应由各方通过友好协商解决。提出请求的一方应通过载有日期的通知，及时告知对方发生了争议并说明争议的性质。如果在该争议通知日期后的三十（30）日内无法通过协商解决，则任何一方可以将该争议提交公司住所地法院解决。');

        $content[] = $this->content('', '14.适用法律');

        $content[] = $this->content('', '本协议的有效性、解释、执行及履行和争议解决应适用中国法律。若本协议与中国法律的强制规定冲突，则双方均有义务按法律的规定进行修正。');

        $content[] = $this->content('', '15.确认');

        $content[] = $this->content('', '1）参与期权激励计划不应视为在激励对象和公司之间建立劳动关系。');

        $content[] = $this->content('', '2）激励对象和公司确认期权激励计划并不赋予激励对象任何与激励对象聘用或服务相关的任何权利，也不影响激励对象或者公司在任何时候有事由或无事由终止激励对象的聘用或服务的权利。');

        //$content[] = $this->content('', '3）激励对象和公司确认期权激励计划并不赋予激励对象任何与激励对象聘用或服务相关的任何权利，也不影响激励对象或者公司在任何时候有事由或无事由终止激励对象的聘用或服务的权利。');

        $content[] = $this->content('', '16.其他规定');

        $content[] = $this->content('', '1）放弃');

        $content[] = $this->content('', '在中国法律许可的范围内，双方未行使或延迟行使其在本协议项下的权利应不构成放弃其权利，任何单独的或部分的行使权利也不排除其进一步的行使。');

        $content[] = $this->content('', '2）转让');

        $content[] = $this->content('', '未经其他方书面同意，任何一方不得全部或部分转让其在本协议项下的权利和义务。');

        $content[] = $this->content('', '3）约束力');

        $content[] = $this->content('', '本协议自双方或其授权代表签字之日起生效。本协议为双方及其有关的合法承继人和受让人的利益而作，并合法地约束权利承受人。本协议只有在双方签署书面文件同意的情况下才能作出不利于激励对象的修改，补充或变更。');

        $content[] = $this->content('', '4）可分割性');

        $content[] = $this->content('', '本协议任何条款的无效将不影响本协议其他条款的效力。');

        $content[] = $this->content('', '（以下无正文）');


        return $content;
    }

    # 市场管理培训师承诺书
    public function pdf_6($agreement, $info)
    {
        $base = Dever::db('setting/base')->find();

        if (isset($info['jiaofu_date'])) {
            $info['jiaofu_date'] = date("Y年m月d日", $info['jiaofu_date']);
        } else {
            $info['jiaofu_total'] = $info['jiaofu_qiquan'] = $info['jiaofu_yuanshi'] = '0.00';
            $info['jiaofu_date'] = date("Y年m月d日");
        }

        if (!isset($info['jiaofu_total'])) {
            $info['jiaofu_total'] = '0.00';
        }
        if (!isset($info['jiaofu_qiquan'])) {
            $info['jiaofu_qiquan'] = '0.00';
        }
        if (!isset($info['jiaofu_yuanshi'])) {
            $info['jiaofu_yuanshi'] = '0.00';
        }

        if (isset($info['qdate']) && $info['qdate']) {
            $qdate = date('Y年m月d日', $info['qdate']);
        } else {
            $qdate = date('Y年m月d日');
        }
        $name = $this->name($agreement, $info);

        $pdf = Dever::load('pdf/lib/core')->init();
        $pdf->SetTitle($name);
        $pdf->setCellHeightRatio(1.8);
        $pdf->setCellPaddings(10, 0, 10, 0);
        //$pdf->font(18, 'B');
        $pdf->font(18);
        $pdf->center('[中食民安（北京）科技有限公司]');
        $pdf->center('期权交付协议');
        $pdf->br();
        $pdf->font($this->font_size);

        $pdf->left('本期权交付协议（“本协议”）由以下双方签署：');
        $pdf->br();

        if (isset($info['content1']) && $info['content']) {
            $info['content'] = Dever::array_decode($info['content']);
            foreach($info['content'] as $k => $v) {
                $pdf->content($v['name'], $v['content'], $this->font_size);
            }
        } else {
            $method = 'content_' . $agreement['type'];
            $content = $this->$method($agreement, $info);

            foreach ($content as $k => $v) {
                $pdf->content($v['name'], $v['content'], $this->font_size);
            }

            if (isset($info['create_state']) && $info['create_state'] == 1) {
                $up = array();
                $up['content'] = Dever::array_encode($content);
                $up['where_id'] = $info['id'];
                $state = Dever::db('option/agreement')->update($up);
            }
        }

        $pdf->AddPage();



        $pdf->left('兹证明，各方或其授权代表于本协议文首日期签署本协议，以昭信守。');

        $pdf->br();

        $pdf->left('[中食民安（北京）科技有限公司]');
        $pdf->left('签署：');

        $pdf->br();
        $pdf->br();

        $pdf->left('期权激励对象：[ '.$info['name'].' ]');
        $pdf->left('签署：');

        //$base['agreement_sign'] = $info['sign'] = 'https://7.churenyiliao.com/1/2022/01/09/de337334506d64eee2a6ec51c9f7db10.png';

        $pic = Dever::pic($base['agreement_sign']);

        $cx = $pdf->GetX();
        $cy = $pdf->GetY();

        $x = $cx - 165;
        $y = $cy - 32;

        if ($pic) {
            $pdf->Image($pic, $x, $y, 20, 20);
        }

        $y = $cy;

        if ($info['sign']) {
            $info['sign'] = Dever::pic($info['sign']);
            $temp = explode('?', $info['sign']);
            $info['sign'] = $temp[0];
            if (strstr($info['sign'], 'http')) {
                $pdf->Image($info['sign'], $x, $y, 20, 20);
            }
        }

        $pdf->out($name);
    }
}