<?php

class AtendimentoService
{
    public static function podeManipular(Atendimento $object, $userId)
    {
        $isProfissionalResponsavel = $object->agendamento->agenda->profissional->system_users_id == $userId;
        
        $pessoa = Pessoa::where('system_users_id','=', $userId)->first();
        
        $isProfissionalVinculado = false;
        
        if($pessoa)
        {
            $isProfissionalVinculado = AgendaProfissional::where('agenda_id', '=', $object->agendamento->agenda_id)->where('profissional_id', '=', $pessoa->id)->where('fl_manipula_atendimento', '=', 'S')->first();        
        }
        
        return $isProfissionalResponsavel || $isProfissionalVinculado;
    }
    
    
    public static function adicionarEstoque(AtendimentoMaterial $atendimentoMaterial, $userId)
    {
        $movimentacao = new Movimentacao();
        $movimentacao->dt_movimentacao = date('Y-m-d H:i:s');
        $movimentacao->material_id = $atendimentoMaterial->material_id;
        $movimentacao->quantidade = $atendimentoMaterial->quantidade;
        $movimentacao->system_user_id = $userId;
        $movimentacao->store();
        
        $atendimentoMaterial->material->estoque_atualizado += $atendimentoMaterial->quantidade;
        $atendimentoMaterial->material->store();
    }
    
    public static function subtrairEstoque(AtendimentoMaterial $atendimentoMaterial, $userId)
    {
        $movimentacao = new Movimentacao();
        $movimentacao->dt_movimentacao = date('Y-m-d H:i:s');
        $movimentacao->material_id = $atendimentoMaterial->material_id;
        $movimentacao->quantidade = -$atendimentoMaterial->quantidade;
        $movimentacao->system_user_id = $userId;
        $movimentacao->store();
        
        $atendimentoMaterial->material->estoque_atualizado -= $atendimentoMaterial->quantidade;
        $atendimentoMaterial->material->store();
    }
    
    public static function iniciarAtendimento(Agendamento $agendamento)
    {
        $atendimento = new Atendimento;
        $atendimento->agendamento_id = $agendamento->id;
        $atendimento->paciente_id = $agendamento->paciente_id;
        $atendimento->profissional_id = $agendamento->get_agenda()->profissional_id;
        $atendimento->dt_inicio = date('Y-m-d H:i:s');
        $atendimento->store();
        
        $agendamentoProcedimentos = $agendamento->getAgendamentoProcedimentos();
        $total = 0;
        if ($agendamentoProcedimentos)
        {
            foreach($agendamentoProcedimentos as $agendamentoProcedimento)
            {
                $atendimentoProcedimento = new AtendimentoProcedimento;
                $atendimentoProcedimento->atendimento_id = $atendimento->id;
                $atendimentoProcedimento->quantidade = $agendamentoProcedimento->quantidade;
                $atendimentoProcedimento->valor = $agendamentoProcedimento->valor;
                $atendimentoProcedimento->valor_total = $agendamentoProcedimento->valor_total;
                $atendimentoProcedimento->procedimento_id = $agendamentoProcedimento->procedimento_id;
                $atendimentoProcedimento->convenio_id = $agendamentoProcedimento->convenio_id;
                $atendimentoProcedimento->store();
                
                $total += $atendimentoProcedimento->valor;
            }
        }
        
        $atendimento->valor_total = $total;
        $atendimento->store();
        $agendamento->atendimento = $atendimento;
        
        self::gerarContaReceber($atendimento);
        
        return $atendimento;
    }
    
    public static function gerarContaReceber($atendimento)
    {
        
        $clinica = Clinica::where('system_unit_id', '=', TSession::getValue('userunitid'))->first();
        
        $conta = new Conta();
        $conta->atendimento_id = $atendimento->id;
        $conta->pessoa_id = $atendimento->agendamento->paciente_id;
        $conta->categoria_conta_id = CategoriaConta::RECEITA_DE_SERVICOS;
        $conta->tipo_conta_id = TipoConta::RECEBER;
        $conta->clinica_id = $clinica->id;
        $conta->data_emissao = date('Y-m-d');
        $conta->total_parcelas = 1;
        $conta->quitada = 'N';
        $conta->descricao = "Atendimento: #{$atendimento->id}";
        $conta->conta_origem_id = $atendimento->id;
        $conta->total_conta = $atendimento->valor_total;
        $conta->store();
        
        $lancamento = new Lancamento();
        $lancamento->conta_id = $conta->id;
        $lancamento->tipo_pagamento_id = TipoPagamento::AVISTA;
        $lancamento->dt_vencimento = date('Y-m-d');
        $lancamento->parcela = 1;
        $lancamento->valor = $conta->total_conta;
        $lancamento->store();
    }
}
